http://www.lydsy.com/JudgeOnline/problem.php?id=3529

思路:令F(i)为i的约数和,

1<=x<=n,1<=y<=m

G(i)为i|gcd(x,y)的个数

g(i)为i=gcd(x,y)的个数

G(i)=floor(n/i)*floor(m/i)

g(i)=Σu(d/i)*G(d) (i|d)

F(i)可以用线性筛O(n)处理

ans=(1<=i<=min(n,m)) Σg(i)*F(i)=Σ F(i)*ΣG(d)*u(d/i) (i|d)

=(1<=d<=min(n,m)) ΣG(d)* Σ(i|d) u(d/i)*F(i)

  1. #include<algorithm>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<iostream>
  6. #define ll long long
  7. #define inf 0x7fffffff
  8. std::pair<int,int>f[];
  9. struct node{
  10. int n,m,id,a;
  11. }q[];
  12. int mx,v[],p[],mark[],mul[],ans[];
  13. int lowbit(int x){
  14. return x&(-x);
  15. }
  16. int read(){
  17. char ch=getchar();int t=,f=;
  18. while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
  19. while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
  20. return t*f;
  21. }
  22. int Read(){
  23. char ch=getchar();ll t=,f=;
  24. while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
  25. while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
  26. return t*f;
  27. }
  28. bool cmp(node a,node b){
  29. return a.a<b.a;
  30. }
  31. void add(int x,int y){
  32. for (int i=x;i<=mx;i+=lowbit(i)){
  33. v[i]+=y;
  34. }
  35. }
  36. int query(int x){
  37. int res=;
  38. if (x==) return ;
  39. for (int i=x;i;i-=lowbit(i)){
  40. res+=v[i];
  41. }
  42. return res;
  43. }
  44. void init(){
  45. mul[]=;
  46. for (int i=;i<=mx;i++){
  47. if (!mark[i]) {
  48. p[++p[]]=i;
  49. mul[i]=-;
  50. }
  51. for (int j=;j<=p[]&&i*p[j]<=mx;j++){
  52. mark[i*p[j]]=;
  53. if (i%p[j]) mul[i*p[j]]=mul[i]*(-);
  54. else {
  55. mul[i*p[j]]=;
  56. break;
  57. }
  58. }
  59. }
  60. for (int i=;i<=mx;i++)
  61. for (int j=i;j<=mx;j+=i)
  62. f[j].first+=i;
  63. for (int i=;i<=mx;i++) f[i].second=i;
  64. }
  65. void solve(int k){
  66. int id=q[k].id,n=q[k].n,m=q[k].m;
  67. for (int i=,j;i<=q[k].n;i=j+){
  68. j=std::min(n/(n/i),m/(m/i));
  69. ans[id]+=(n/i)*(m/i)*(query(j)-query(i-));
  70. }
  71. }
  72. int main(){
  73. int Q=read();
  74. for (int i=;i<=Q;i++){
  75. q[i].n=read(),q[i].m=read(),q[i].a=read();q[i].id=i;
  76. if (q[i].n>q[i].m) std::swap(q[i].n,q[i].m);
  77. mx=std::max(mx,q[i].n);
  78. }
  79. init();
  80. std::sort(q+,q++Q,cmp);
  81. std::sort(f+,f++mx);
  82. int now=;
  83. for (int i=;i<=Q;i++){
  84. while (now+<=mx&&f[now+].first<=q[i].a){
  85. now++;
  86. for (int j=f[now].second;j<=mx;j+=f[now].second){
  87. add(j,f[now].first*mul[j/f[now].second]);
  88. }
  89. }
  90. solve(i);
  91. }
  92. for (int i=;i<=Q;i++)
  93. printf("%d\n",ans[i]&inf);
  94. }

BZOJ 3529 数表(莫比乌斯反演)的更多相关文章

  1. bzoj 3529 数表 莫比乌斯反演+树状数组

    题目大意: 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和j的所有自然数之和.给定a,计算数表中不大于a的数之和. ...

  2. bzoj [SDOI2014]数表 莫比乌斯反演 BIT

    bzoj [SDOI2014]数表 莫比乌斯反演 BIT 链接 bzoj luogu loj 思路 \[ \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}a*[f[ ...

  3. BZOJ 3529 数表(莫比乌斯+树状数组)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3529 题意:有一张n×m的数表,其第i行第j列的数值为能同时整除i和j的所有自然数 ...

  4. BZOJ[Sdoi2014]数表 莫比乌斯反演

    [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2383  Solved: 1229[Submit][Status][Disc ...

  5. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  6. BZOJ 3529 [Sdoi2014]数表 (莫比乌斯反演+树状数组+离线)

    题目大意:有一张$n*m$的数表,第$i$行第$j$列的数是同时能整除$i,j$的所有数之和,求数表内所有不大于A的数之和 先是看错题了...接着看对题了发现不会做了...刚了大半个下午无果 看了Po ...

  7. BZOJ 3259 [Sdoi2014]数表 (莫比乌斯反演 + 树状数组)

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2321  Solved: 1187[Submit][Status ...

  8. bzoj3529: [Sdoi2014]数表 莫比乌斯反演

    题意:求\(\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))(gcd(i,j)<=a),f(x)是x的因子和函数\) 先考虑没有限制的情况,考虑枚举gcd为x,那么有\(\ ...

  9. 【BZOJ3529】[Sdoi2014]数表 莫比乌斯反演+树状数组

    [BZOJ3529][Sdoi2014]数表 Description 有一张N×m的数表,其第i行第j列(1 < =i < =礼,1 < =j < =m)的数值为能同时整除i和 ...

随机推荐

  1. 使用UEditor

    在http://ueditor.baidu.com/website/上下载官方文件 文本编辑器的配置文件在ueditor.config.js 需要注意一下几点 首先 var URL = window. ...

  2. filter 以及 orderBy的使用

    filter用于关键字过滤操作,orderBy用于排序操作,运行界面如下: 点击标题Name与Email实现排序功能,输入框中输入关键字进行过滤,同时实现根据关键字进行过滤后进行排序操作: ng-re ...

  3. UVa12096.The SetStack Computer

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. Java 自定义实现 LRU 缓存算法

    背景 LinkedHashMap继承自HashMap,内部提供了一个removeEldestEntry方法,该方法正是实现LRU策略的关键所在,且HashMap内部专门为LinkedHashMap提供 ...

  5. java生成字符串md5函数类(javaSE)

    //实现生成MD5值 import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.B ...

  6. 数据库中简单的增删改查(CRUD)

    一切都是基于数据,而对数据的管理都离不开数据库.最近学到数据库的简单操作,所以写下这篇文章,总结一下学习到的知识.浅陋之处,多多见谅. 补充一下:一直弄不清SQL Server,Mysql ,以及Or ...

  7. UIImage图片处理

    #pragma mark - #pragma mark - 缩放处理 + (UIImage *)scaleImage:(UIImage *)image withScale:(float)scale { ...

  8. Linux :: vi E212: Can't open file for writing

    Linux :: vi E212: Can't open file for writing sysct1.conf 可能无写权限!查看方法:ls -lh /etc/sysct1.conf如果没有,则c ...

  9. C++菱形继承的构造函数

    网上搜了很多,大多是关于菱形虚继承的构造函数应该怎么写,或者就是最简单的,四个类都不带参数的构造函数. 本文旨在记录一下困扰了博主1h的问题,非常浅显,有帮助固然好,如果侮辱谁的智商还见谅,当然无限欢 ...

  10. 《JavaScript 闯关记》之垃圾回收和内存管理

    JavaScript 具有自动垃圾收集机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存.而在 C 和 C++ 之类的语言中,开发人员的一项基本 ...