题意:求\(\sum_{i=1}^n \sum_{j=1}^m\frac{i*j}{gcd(i,j)}\)

题解:\(ans=\sum_{i=1}^n\sum_{j=1}^m \frac{i*j}{gcd(i,j)}\)

\(=\sum_{d=1}^{min(n,m)}d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor}i*j[gcd(i,j)==1]\)

\(=\sum_{d=1}^{min(n,m)}d\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor}i*j \sum_{x|gcd(i,j)}\mu(x)\)

\(=\sum_{d=1}^{min(n,m)}d\sum_{x=1}^{min(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)}x^2\mu(x)\sum_{i=1}^{\lfloor \frac{n}{d*x} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d*x} \rfloor}i*j\)

最后里层和外层都能整除分块,sum可以处理成\(mu*i^2\)的前缀和,

取模太多会T

  1. /**************************************************************
  2. Problem: 2154
  3. User: walfy
  4. Language: C++
  5. Result: Accepted
  6. Time:18528 ms
  7. Memory:167308 kb
  8. ****************************************************************/
  9. //#pragma GCC optimize(2)
  10. //#pragma GCC optimize(3)
  11. //#pragma GCC optimize(4)
  12. //#pragma GCC optimize("unroll-loops")
  13. //#pragma comment(linker, "/stack:200000000")
  14. //#pragma GCC optimize("Ofast,no-stack-protector")
  15. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  16. #include<bits/stdc++.h>
  17. #define fi first
  18. #define se second
  19. #define db double
  20. #define mp make_pair
  21. #define pb push_back
  22. #define pi acos(-1.0)
  23. #define ll long long
  24. #define vi vector<int>
  25. #define mod 20101009
  26. #define ld long double
  27. #define C 0.5772156649
  28. #define ls l,m,rt<<1
  29. #define rs m+1,r,rt<<1|1
  30. #define pll pair<ll,ll>
  31. #define pil pair<int,ll>
  32. #define pli pair<ll,int>
  33. #define pii pair<int,int>
  34. //#define cd complex<double>
  35. #define ull unsigned long long
  36. #define base 1000000000000000000
  37. #define Max(a,b) ((a)>(b)?(a):(b))
  38. #define Min(a,b) ((a)<(b)?(a):(b))
  39. #define fin freopen("a.txt","r",stdin)
  40. #define fout freopen("a.txt","w",stdout)
  41. #define fio ios::sync_with_stdio(false);cin.tie(0)
  42. template<typename T>
  43. inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
  44. template<typename T>
  45. inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
  46. inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
  47. inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
  48. inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  49. inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
  50. inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}
  51. using namespace std;
  52. const double eps=1e-8;
  53. const ll INF=0x3f3f3f3f3f3f3f3f;
  54. const int N=10000000+10,maxn=400000+10,inf=0x3f3f3f3f;
  55. int prime[N],cnt,mu[N];
  56. ll sum[N];
  57. bool mark[N];
  58. void init()
  59. {
  60. mu[1]=1;
  61. for(int i=2;i<N;i++)
  62. {
  63. if(!mark[i])prime[++cnt]=i,mu[i]=-1;
  64. for(int j=1;j<=cnt&&prime[j]*i<N;j++)
  65. {
  66. mark[prime[j]*i]=1;
  67. mu[prime[j]*i]=-mu[i];
  68. if(i%prime[j]==0){mu[prime[j]*i]=0;break;}
  69. }
  70. }
  71. for(ll i=1;i<N;i++)
  72. {
  73. sum[i]=sum[i-1]+i*i%mod*mu[i];
  74. add(sum[i],mod);
  75. }
  76. }
  77. ll F(ll n,ll m)
  78. {
  79. if(n>m)swap(n,m);
  80. ll ans=0;
  81. for(ll i=1,j;i<=n;i=j+1)
  82. {
  83. j=Min(n/(n/i),m/(m/i));
  84. ll t1=n/i,t2=m/i;
  85. t1=t1*(t1+1)/2;t2=t2*(t2+1)/2;
  86. t1%=mod,t2%=mod;
  87. ll te=(sum[j]-sum[i-1]);add(te,mod);
  88. add(ans,te*t1%mod*t2%mod);
  89. }
  90. return ans;
  91. }
  92. int main()
  93. {
  94. init();
  95. ll n,m;scanf("%lld%lld",&n,&m);
  96. if(n>m)swap(n,m);
  97. ll ans=0;
  98. for(ll i=1,j;i<=n;i=j+1)
  99. {
  100. j=Min(n/(n/i),m/(m/i));
  101. add(ans,((j+i)*(j-i+1)/2)%mod*F(n/i,m/i)%mod);
  102. }
  103. printf("%lld\n",ans);
  104. return 0;
  105. }
  106. /********************
  107. ********************/

bzoj2154: Crash的数字表格 莫比乌斯反演的更多相关文章

  1. [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块)

    [BZOJ 2154]Crash的数字表格(莫比乌斯反演+数论分块) 题面 求 \[\sum_{i=1}^{n} \sum_{j=1}^{m} \mathrm{lcm}(i,j)\] 分析 \[\su ...

  2. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  3. [bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)

    题目描述 TTT组数据,给出NNN,MMM,求∑x=1N∑y=1Mlim(x,y)\sum_{x=1}^N\sum_{y=1}^M lim(x,y)\newlinex=1∑N​y=1∑M​lim(x, ...

  4. 【bzoj2154】Crash的数字表格 莫比乌斯反演

    题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b整除的最小正整数.例如,LCM(6, ...

  5. 【BZOJ】2154: Crash的数字表格 莫比乌斯反演

    [题意]给定n,m,求Σlcm(i,j),1<=i<=n,1<=j<=m,n,m<=10^7. [算法]数论(莫比乌斯反演) [题解] $$ans=\sum_{i\leq ...

  6. BZOJ 2154 Crash的数字表格 ——莫比乌斯反演

    求$\sum_{i=1}^n\sum_{j=1}^n lcm(i,j)$ 枚举因数 $ans=\sum_{d<=n} F(d) * d$ $F(d)$表示给定范围内两两$\sum_{gcd(i, ...

  7. [国家集训队] Crash的数字表格 - 莫比乌斯反演,整除分块

    考虑到\(lcm(i,j)=\frac{ij}{gcd(i,j)}\) \(\sum_{i=1}^n\sum_{j=1}^m\frac{ij}{gcd(i,j)}\) \(\sum_{d=1}^{n} ...

  8. [bzoj2154]Crash的数字表格(mobius反演)

    题意:$\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^m {lcm(i,j)} } $ 解题关键: $\sum\limits_{i = 1}^n {\sum\l ...

  9. 洛谷 - P1829 - Crash的数字表格 - 莫比乌斯反演

    求: \(S(n,m)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 显然: \(S(n,m)=\sum\limits_{i=1}^{n}\ ...

随机推荐

  1. python-正则表达式练习题

    1.匹配一行文字中的所有开头的字母内容 #coding=utf-8 import re s="i love you not because of who you are, but becau ...

  2. Ajax jquery的库的简化版本

    Ajax jquery的库的简化版本 (function(){    //面向外界的唯一变量接口!    var myajax = window.myajax = {};    //作者.版本号等等信 ...

  3. SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting

    0x00 增加snmp v3用户 增加用户的时候,必须要停止SNMP服务. # service snmpd stop # net-snmp-config --create-snmpv3-user -r ...

  4. PHP-ThinkPHP5砍价活动相关设计

    近期我们公司项目里陆陆续续有很多为了招引新用户的活动推出,砍价的活动由我来负责,我们的项目是在微信浏览器里供用户浏览访问. 大概描述:进入砍价活动列表页选择有意向的商品,用户点击商品图片可以看到WEB ...

  5. bzoj3505 / P3166 [CQOI2014]数三角形

    P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成 ...

  6. Java的各种加密算法

    Java的各种加密算法 JAVA中为我们提供了丰富的加密技术,可以基本的分为单向加密和非对称加密 1.单向加密算法 单向加密算法主要用来验证数据传输的过程中,是否被篡改过. BASE64 严格地说,属 ...

  7. 20165310 Java实验五《网络编程与安全》

    20165310 Java实验五<网络编程与安全> 任务一 题目:①编写MyBC.java实现中缀表达式转后缀表达式的功能:②编写MyDC.java实现从上面功能中获取的表达式中实现后缀表 ...

  8. C++11标准 STL正则表达式 验证电子邮件地址

    转自:http://www.cnblogs.com/yejianfei/archive/2012/10/07/2713715.html 我们最经常遇到的验证,就是电子邮件地址验证.网站上常见.各种网页 ...

  9. Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】

    在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程——网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

  10. 不同ContentType的post请求

    public static T Invoke<T>(string url, object input, bool requireJSON = true) { using (var clie ...