传送门

设$$f(k)=\sum_{i=1}^{a}\sum_{j=1}^{b}[gcd(i,j)=k]$$

$$g(n)=\sum_{n|k}f(k)=\lfloor\frac{a}{n}\rfloor\lfloor\frac{b}{n}\rfloor$$

根据莫比乌斯反演定理可以推出$$f(n)=\sum_{n|k}\mu(\lfloor\frac{k}{n}\rfloor)g(k)$$

那么可以发现$ans=f(d)$

然后用推出来的结论带进去

$$ans=\sum_{d|k}\mu(\lfloor\frac{k}{d}\rfloor)g(k)$$

枚举$\lfloor\frac{k}{d}\rfloor$设为$t$

$$ans=\sum_{t=1}^{min(\lfloor\frac{a}{d}\rfloor,\lfloor\frac{b}{d}\rfloor)}\mu(t)\lfloor\frac{a}{td}\rfloor\lfloor\frac{b}{td}\rfloor$$

对于$\lfloor\frac{a}{td}\rfloor\lfloor\frac{b}{td}\rfloor$相同的一段我们可以直接用前缀和算出答案

总而言之就是先预处理出$\mu$的前缀和然后用整除分块,那么每一次询问的复杂度就是$O(\sqrt{n})$

  1. //minamoto
  2. #include<cstdio>
  3. #include<iostream>
  4. #define ll long long
  5. using namespace std;
  6. #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  7. char buf[<<],*p1=buf,*p2=buf;
  8. inline int read(){
  9. #define num ch-'0'
  10. char ch;bool flag=;int res;
  11. while(!isdigit(ch=getc()))
  12. (ch=='-')&&(flag=true);
  13. for(res=num;isdigit(ch=getc());res=res*+num);
  14. (flag)&&(res=-res);
  15. #undef num
  16. return res;
  17. }
  18. const int N=6e5+;
  19. int p[N],mu[N],vis[N],m,sum[N];ll ans,lim;
  20. void init(int n){
  21. mu[]=;
  22. for(int i=;i<=n;++i){
  23. if(!vis[i]) mu[i]=-,p[++m]=i;
  24. for(int j=;j<=m&&p[j]*i<=n;++j){
  25. vis[i*p[j]]=;
  26. if(i%p[j]==) break;
  27. mu[i*p[j]]=-mu[i];
  28. }
  29. }
  30. for(int i=;i<=n;++i) sum[i]=sum[i-]+mu[i];
  31. }
  32. int main(){
  33. // freopen("testdata.in","r",stdin);
  34. int n,m,T,d;scanf("%d",&T);
  35. init();
  36. while(T--){
  37. scanf("%d%d%d",&n,&m,&d);ans=;
  38. lim=min(n/d,m/d);
  39.  
  40. for(int l=,r;l<=lim;l=r+){
  41. r=min(n/(n/l),m/(m/l));
  42. ans+=1ll*(n/(l*d))*(m/(l*d))*(sum[r]-sum[l-]);
  43. }
  44. printf("%lld\n",ans);
  45. }
  46. return ;
  47. }

洛谷P3455 [POI2007]ZAP-Queries(莫比乌斯反演)的更多相关文章

  1. 洛谷P3455 [POI2007]ZAP-Queries (莫比乌斯反演)

    题意:求$\sum_{i=1}^{a}\sum_{j=1}^{b}[gcd(i,j)==d]$(1<=a,b,d<=50000). 很套路的莫比乌斯反演. $\sum_{i=1}^{n}\ ...

  2. 洛谷 P3455 [POI2007]ZAP-Queries (莫比乌斯函数)

    题目链接:P3455 [POI2007]ZAP-Queries 题意 给定 \(a,b,d\),求 \(\sum_{x=1}^{a} \sum_{y=1}^{b}[gcd(x, y) = d]\). ...

  3. 【BZOJ1101】[POI2007] Zap(莫比乌斯反演)

    点此看题面 大致题意: 求\(\sum_{x=1}^N\sum_{y=1}^M[gcd(x,y)==d]\). 一道类似的题目 推荐先去做一下这道题:[洛谷2257]YY的GCD,来初步了解一下莫比乌 ...

  4. 洛谷 P5518 - [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题(莫比乌斯反演+整除分块)

    洛谷题面传送门 一道究极恶心的毒瘤六合一题,式子推了我满满两面 A4 纸-- 首先我们可以将式子拆成: \[ans=\prod\limits_{i=1}^A\prod\limits_{j=1}^B\p ...

  5. 洛谷P2257 YY的GCD 莫比乌斯反演

    原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...

  6. 【BZOJ】1101 [POI2007]Zap(莫比乌斯反演)

    题目 传送门:QWQ 分析 莫比乌斯反演. 还不是很熟练qwq 代码 //bzoj1101 //给出a,b,d,询问有多少对二元组(x,y)满足gcd(x,y)=d.x<=a,y<=b # ...

  7. BZOJ1101 POI2007 Zap 【莫比乌斯反演】

    BZOJ1101 POI2007 Zap Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b, ...

  8. [洛谷P1390]公约数的和·莫比乌斯反演

    公约数的和 传送门 分析 这道题很显然答案为 \[Ans=\sum_{i=1}^n\sum_{j=i+1}^n (i,j)\] //其中\((i,j)\)意味\(gcd(i,j)\) 这样做起来很烦, ...

  9. 洛谷 - P4449 - 于神之怒加强版 - 莫比乌斯反演

    https://www.luogu.org/problemnew/show/P4449 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{i=1}^{m} gcd(i, ...

随机推荐

  1. RDLC报表-分组序号

    1.RowNumber("group_name")是按行每个分组重新1,2,3这样来显示的,如果需要按每个分组来显示1,并且递增,则需要通过自定义代码来控制,在报表-属性-代码里插 ...

  2. POJ1185 炮兵阵地 —— 状压DP

    题目链接:http://poj.org/problem?id=1185 炮兵阵地 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions ...

  3. iOS开发 - 如何跳到系统设置里的各种设置界面

    在iOS开发中,有时会有跳转系统设置界面的需求,例如提示用户打开蓝牙或者WIFI,提醒用户打开推送或者位置权限等.在iOS6之后,第三方应用需要跳转系统设置界面,需要在URL type中添加一个pre ...

  4. 淘宝双十一页面(Flexible)demo

    下面的代码是看了大漠 使用Flexible实现手淘H5页面的终端适配 做的一个demo. <!DOCTYPE html> <html lang="en" ng-a ...

  5. Ubuntu更改启动内存

    参考:https://superuser.com/questions/152921/how-to-boot-with-mem-1024m-argument-using-grub-ubuntu-10-0 ...

  6. STL中mem_fun和mem_fun_ref的用法

    例如:假设有如下的代码: class Employee { public: int DoSomething(){} } std::vector<Employee> Emps; 假设我们要调 ...

  7. jquery新添加元素无法删除

    $("body").on('click',".delic",function(){ $(this).parent().remove(); })

  8. BZOJ-3881:Divljak (AC自动机+DFS序+树链求并+树状数组)

    Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操作有两种形式: “1 P”,Bob往自己的集合里添加了一个字符串P. “2 x” ...

  9. POJ3468 A Simple Problem with Integers(数状数组||区间修改的RMQ问题)

    You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...

  10. 主备角色switch

    理论知识:Switchover 切换允许primary 和一个备库进行切换,并且这种切换没有数据丢失. 前提条件: 1) 主备库相关参数 fal_client.fal_server .standby_ ...