一、题目

点此看题

二、解法

直接推柿子吧:

\[\sum_{i=1}^n\sum_{j=1}^nf(\gcd(i,j))^k
\]
\[\sum_{d=1}^nf(d)^k\sum_{i=1}^{n/d}\sum_{j=1}^{n/d}[(i,j)=1]
\]
\[\sum_{d=1}^nf(d)^k\sum_{x=1}^{n/d}\mu(x)\frac{n}{dx}\frac{n}{dx}
\]
\[\sum_{T=1}^n(\frac{n}{T})^2\sum_{d|T}f(d)^k\mu(\frac{T}{d})
\]

上面的式子就是普通的莫比乌斯反演,现在发现有些做不动了,算的时候外面可以套整除分块,但是里面就很难算的。因为 \(n\) 太大了所以不能预处理,我们考虑用筛法来做后面那个部分的前缀和。

设 \(h(i)=\sum_{d|i}f(d)\mu(\frac{i}{d})=f*\mu\) ,如果能求出 \(\sum_{i=1}^n h(i)\) 我们就成功了。考虑杜教筛,令辅助函数 \(g\) 为 \(I\) ,那么 \(g\) 的前缀和是很好求的,\(h*g=f*\mu*I=f\) ,它的前缀和虽然看上去还是很难,但是已经得到简化了。

求 \(f\) 的前缀和可以用 \(\tt Min25\) ,由于是次大的质因数产生贡献,所以我们可以在递归的时候,算每一个比他大的质数和他的贡献,也就是这个质数作为最大的质因子,他作为次大的质因子的贡献。还有一种情况是最大的质因子就是他,但是这要求次数要大于 \(1\) ,递归部分代码可以这样写:

  1. int S(int x,int y)
  2. {
  3. if(x<=p[y]) return 0;//出口
  4. int ans=pk[y]*(g[id(x)]-y)%MOD;//y一定是上一个质因数,这里我们算贡献,g是质数个数
  5. for(int i=y+1;i<=cnt && p[i]*p[i]<=x;i++)//Min25
  6. {
  7. int pr=p[i];
  8. for(int e=1;pr<=x;e++,pr*=p[i])
  9. ans=(ans+S(x/pr,i)+(e!=1)*pk[i])%MOD;//如果次数大于1,那么可以直接贡献
  10. }
  11. return ans;
  12. }

然后我们的杜教筛和 \(S(n,0)\) 都是需要记忆化的,由于我写自然溢出 \(\tt Wa\) 了,所以我只能暴力模了。

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <cmath>
  4. #include <map>
  5. using namespace std;
  6. const int N = 200000;
  7. const int M = N+5;
  8. #define int long long
  9. const int MOD = 4294967296ll;
  10. int read()
  11. {
  12. int x=0,f=1;char c;
  13. while((c=getchar())<'0' || c>'9') {if(c=='-') f=-1;}
  14. while(c>='0' && c<='9') {x=(x<<3)+(x<<1)+(c^48);c=getchar();}
  15. return x*f;
  16. }
  17. int n,k,cnt,tot,sqr,p[M],vis[M],pk[M],w[M];
  18. int ans,g[M],p1[M],s1[M],p2[M],s2[M],id1[M],id2[M];
  19. int qkpow(int a,int b)
  20. {
  21. int r=1;
  22. while(b>0)
  23. {
  24. if(b&1) r=r*a%MOD;
  25. a=a*a%MOD;
  26. b>>=1;
  27. }
  28. return r;
  29. }
  30. void init(int n)
  31. {
  32. p[0]=pk[0]=1;
  33. for(int i=2;i<=n;i++)
  34. {
  35. if(!vis[i])
  36. {
  37. p[++cnt]=i;
  38. pk[cnt]=qkpow(i,k);
  39. }
  40. for(int j=1;j<=cnt && i*p[j]<=n;j++)
  41. {
  42. vis[i*p[j]]=1;
  43. if(i%p[j]==0) break;
  44. }
  45. }
  46. }
  47. int id(int x)
  48. {
  49. if(x<=sqr) return id1[x];
  50. return id2[n/x];
  51. }
  52. int S(int x,int y)
  53. {
  54. if(x<=p[y]) return 0;
  55. int ans=pk[y]*(g[id(x)]-y)%MOD;
  56. for(int i=y+1;i<=cnt && p[i]*p[i]<=x;i++)
  57. {
  58. int pr=p[i];
  59. for(int e=1;pr<=x;e++,pr*=p[i])
  60. ans=(ans+S(x/pr,i)+(e!=1)*pk[i])%MOD;
  61. }
  62. return ans;
  63. }
  64. int zy(int n)
  65. {
  66. if(p2[id(n)]) return s2[id(n)];
  67. s2[id(n)]=S(n,0);p2[id(n)]=1;
  68. return s2[id(n)];
  69. }
  70. int get(int n)
  71. {
  72. if(n<=1) return 0;
  73. if(p1[id(n)]) return s1[id(n)];
  74. int ans=zy(n);
  75. for(int l=2,r;l<=n;l=r+1)
  76. {
  77. r=n/(n/l);
  78. ans=(ans-(r-l+1)*get(n/l))%MOD;
  79. }
  80. s1[id(n)]=ans;p1[id(n)]=1;
  81. return ans;
  82. }
  83. signed main()
  84. {
  85. n=read();k=read();
  86. init(N);sqr=sqrt(n);
  87. for(int l=1,r;l<=n;l=r+1)
  88. {
  89. r=n/(n/l);//写错了
  90. w[++tot]=n/l;
  91. g[tot]=w[tot]-1;
  92. if(n/l<=sqr) id1[n/l]=tot;
  93. else id2[n/(n/l)]=tot;
  94. }
  95. for(int i=1;i<=cnt;i++)
  96. for(int j=1;j<=tot && p[i]*p[i]<=w[j];j++)
  97. g[j]-=g[id(w[j]/p[i])]-i+1;
  98. for(int l=1,r;l<=n;l=r+1)
  99. {
  100. r=n/(n/l);
  101. ans=(ans+(n/l)*(n/l)*(get(r)-get(l-1)))%MOD;
  102. }
  103. printf("%lld\n",(ans+MOD)%MOD);
  104. }

[LOJ 572] Misaka Network 与求和的更多相关文章

  1. loj 572 Misaka Network 与求和 —— min_25筛

    题目:https://loj.ac/problem/572 推式子:https://www.cnblogs.com/cjoieryl/p/10150718.html 又学习了一下杜教筛hh: 原来 u ...

  2. 【LOJ#572】Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛)

    [LOJ#572]Misaka Network 与求和(莫比乌斯反演,杜教筛,min_25筛) 题面 LOJ \[ans=\sum_{i=1}^n\sum_{j=1}^n f(gcd(i,j))^k\ ...

  3. LOJ 572 「LibreOJ Round #11」Misaka Network 与求和——min_25筛

    题目:https://loj.ac/problem/572 莫比乌斯反演得 \( ans=\sum\limits_{D=1}^{n}\left\lfloor\frac{n}{D}\right\rflo ...

  4. LOJ# 572. 「LibreOJ Round #11」Misaka Network 与求和(min25筛,杜教筛,莫比乌斯反演)

    题意 求 \[ \sum_{i = 1}^{n} \sum_{i = 1}^{n} f(\gcd(i, j))^k \pmod {2^{32}} \] 其中 \(f(x)\) 为 \(x\) 的次大质 ...

  5. Loj#572. 「LibreOJ Round #11」Misaka Network 与求和

    题目 有生之年我竟然能\(A\) 这个题求的是这个 \[\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))^k\] \(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)= ...

  6. LOJ572: Misaka Network 与求和

    传送门 假设 \(f^k(i)\) 就是 \(f(i)\) 莫比乌斯反演得到 \[ans=\sum_{i=1}^{N}\lfloor\frac{N}{i}\rfloor^2\sum_{d|i}f(d) ...

  7. LOJ572. 「LibreOJ Round #11」Misaka Network 与求和 [莫比乌斯反演,杜教筛,min_25筛]

    传送门 思路 (以下令\(F(n)=f(n)^k\)) 首先肯定要莫比乌斯反演,那么可以推出: \[ ans=\sum_{T=1}^n \lfloor\frac n T\rfloor^2\sum_{d ...

  8. 可能是一篇(抄来的)min25学习笔记

    可能是一篇(抄来的)min25学习笔记 一个要求很多的积性函数 我们考虑有一个积性函数,这个函数满足可以快速计算质数处的值 且质数可以写成一个多项式的形式--而且这个多项式如果强行套在合数上,满足积性 ...

  9. Min_25 筛小结

    Min_25 筛这个东西,完全理解花了我很长的时间,所以写点东西来记录一些自己的理解. 它能做什么 对于某个数论函数 \(f\),如果满足以下几个条件,那么它就可以用 Min_25 筛来快速求出这个函 ...

随机推荐

  1. Redis 多实例 & 主从复制

    Redis 多实例 多实例目录 [root@db01 ~]# mkdir /service/redis/{6380,6381} 多实例配置文件 # 第一台多实例配置 [root@db01 ~]# vi ...

  2. 洛谷p1198 最大数

    #include <iostream> #include <cstdio> #include <algorithm> using namespace std; in ...

  3. ARM汇编指令-STMFD/LDMFD

    根据调用规则ATPCS,程序一般都使用FD(FullDescending)类型的数据栈(满栈),那么对立的就由空栈类型的数据栈.空栈是指SP操作完后指向的地址空间是未使用的,反之满栈就是SP指向的地址 ...

  4. Linux 驱动框架---驱动中的异步

    异步IO是对阻塞和轮询IO的机制补充,所谓异步IO就是在设备数据就绪时主动通知所属进程进行处理的机制.之所以说是异步是相对与被通知进程的,因为进程不知道也无法知道什么时候会被通知:这一机制非常类似于硬 ...

  5. tfrecords转图片存储

    import os import shutil import tensorflow as tf import time import sys import cv2 # 图片存放位置 PATH_RES ...

  6. Vue 面试题汇总

    Vue 面试题汇总 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  7. 2020 Google 开发者大会

    2020 Google 开发者大会 Google Developer Summit https://developersummit.googlecnapps.cn/ Flutter | Web | M ...

  8. Flow All In One

    Flow All In One Flow is a static type checker for JavaScript https://github.com/facebook/flow https: ...

  9. 如何使用 js 写一个正常人看不懂的无聊代码

    如何使用 js 写一个正常人看不懂的无聊代码 代码质量, 代码可读性, 代码可维护性, clean code WAT js WTF https://www.destroyallsoftware.com ...

  10. KMP 算法 & 字符串查找算法

    KMP算法 Knuth–Morris–Pratt algorithm 克努斯-莫里斯-普拉特 算法 algorithm kmp_search: input: an array of character ...