题目描述

求∑i=1n∑j=1n(i,j) mod (1e9+7)n&lt;=1010\sum_{i=1}^n\sum_{j=1}^n(i,j)~mod~(1e9+7)\\n&lt;=10^{10}i=1∑n​j=1∑n​(i,j) mod (1e9+7)n<=1010

题目分析

乍一看十分像裸莫比乌斯反演,然而nnn的范围让人望而却步

于是先变化一下式子

Ans=∑i=1n∑j=1n(i,j)Ans=\sum_{i=1}^n\sum_{j=1}^n(i,j)Ans=i=1∑n​j=1∑n​(i,j)

枚举T=(i,j)T=(i,j)T=(i,j)

=∑T=1n∑i=1⌊nT⌋∑j=1⌊nT⌋[(i,j)==1]=∑T=1n∑i=1⌊nT⌋∑j=1⌊nT⌋∑d∣i,d∣jμ(d)=∑T=1nT∑d=1⌊nT⌋μ(d)⌊nTd⌋2=\sum_{T=1}^n\sum_{i=1}^{\lfloor\frac nT\rfloor}\sum_{j=1}^{\lfloor\frac nT\rfloor}[(i,j)==1]\\=\sum_{T=1}^n\sum_{i=1}^{\lfloor\frac nT\rfloor}\sum_{j=1}^{\lfloor\frac nT\rfloor}\sum_{d|i,d|j}\mu(d)\\=\sum_{T=1}^nT\sum_{d=1}^{\lfloor\frac nT\rfloor}\mu(d){\lfloor\frac n{Td}\rfloor}^2=T=1∑n​i=1∑⌊Tn​⌋​j=1∑⌊Tn​⌋​[(i,j)==1]=T=1∑n​i=1∑⌊Tn​⌋​j=1∑⌊Tn​⌋​d∣i,d∣j∑​μ(d)=T=1∑n​Td=1∑⌊Tn​⌋​μ(d)⌊Tdn​⌋2

令k=Td

=∑k=1n⌊nk⌋2φ(k)=\sum_{k=1}^n{\lfloor\frac n{k}\rfloor}^2\varphi(k)=k=1∑n​⌊kn​⌋2φ(k)

则此时可以整除分块优化,每次算出⌊nk⌋{\lfloor\frac n{k}\rfloor}⌊kn​⌋相等的上下界i,ji,ji,j后用莫比乌斯反演计算(Sφ(j)−Sφ(i−1))(S\varphi(j)-S\varphi(i-1))(Sφ(j)−Sφ(i−1))

由于计算φ\varphiφ的前缀和时记忆化处理过,所以在杜教筛外面再套了一个整除分块优化不会影响时间复杂度,复杂度仍是Θ(n23)\Theta(n^{\frac23})Θ(n32​)

AC Code
  1. #include <cstdio>
  2. #include <map>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef long long LL;
  7. const int mod = 1e9+7;
  8. const int MAXN = 5e6+1;
  9. const int inv2 = 500000004;
  10. map<LL, LL> S; LL s[MAXN];
  11. int Prime[MAXN], Cnt, phi[MAXN];
  12. bool IsnotPrime[MAXN];
  13. void init()
  14. {
  15. phi[1] = 1;
  16. for(int i = 2; i < MAXN; ++i)
  17. {
  18. if(!IsnotPrime[i]) Prime[++Cnt] = i, phi[i] = i-1;
  19. for(int j = 1; j <= Cnt && i * Prime[j] < MAXN; ++j)
  20. {
  21. IsnotPrime[i * Prime[j]] = 1;
  22. if(i % Prime[j] == 0)
  23. {
  24. phi[i * Prime[j]] = phi[i] * Prime[j];
  25. break;
  26. }
  27. phi[i * Prime[j]] = phi[i] * phi[Prime[j]];
  28. }
  29. }
  30. for(int i = 1; i < MAXN; ++i) s[i] = (s[i-1] + phi[i]) % mod;
  31. }
  32. inline LL sum(LL n)
  33. {
  34. if(n < MAXN) return s[n];
  35. if(S.count(n)) return S[n];
  36. LL ret = (n%mod) * ((n+1)%mod) % mod * inv2 % mod;
  37. for(LL i = 2, j; i <= n; i=j+1)
  38. {
  39. j = n/(n/i);
  40. ret = (ret - sum(n/i) * ((j-i+1)%mod) % mod) % mod;
  41. }
  42. return S[n] = ret;
  43. }
  44. inline LL solve(LL n)
  45. {
  46. LL ret = 0;
  47. for(LL i = 1, j; i <= n; i=j+1)
  48. {
  49. j = n/(n/i);
  50. ret = (ret + ((n/i)%mod) * ((n/i)%mod) % mod * ((sum(j)-sum(i-1))%mod) % mod) % mod;
  51. }
  52. return ret;
  53. }
  54. int main ()
  55. {
  56. init(); LL n;
  57. scanf("%lld", &n);
  58. printf("%lld\n", (solve(n)+mod)%mod);
  59. }

[51Nod 1237] 最大公约数之和 (杜教筛+莫比乌斯反演)的更多相关文章

  1. BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演

    BZOJ_4176_Lucas的数论_杜教筛+莫比乌斯反演 Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求 ...

  2. 【XSY2731】Div 数论 杜教筛 莫比乌斯反演

    题目大意 定义复数\(a+bi\)为整数\(k\)的约数,当且仅当\(a\)和\(b\)为整数且存在整数\(c\)和\(d\)满足\((a+bi)(c+di)=k\). 定义复数\(a+bi\)的实部 ...

  3. [CQOI2015][bzoj3930] 选数 [杜教筛+莫比乌斯反演]

    题面: 传送门 思路: 首先我们把区间缩小到$\left[\lfloor\frac{L-1}{K}\rfloor,\lfloor\frac{R}{K}\rfloor\right]$ 这道题的最特殊的点 ...

  4. [bzoj 4176] Lucas的数论 (杜教筛 + 莫比乌斯反演)

    题面 设d(x)d(x)d(x)为xxx的约数个数,给定NNN,求 ∑i=1N∑j=1Nd(ij)\sum^{N}_{i=1}\sum^{N}_{j=1} d(ij)i=1∑N​j=1∑N​d(ij) ...

  5. [51nod1220] 约数之和(杜教筛+莫比乌斯反演)

    题面 传送门 题解 嗯--还是懒得写了--这里 //minamoto #include<bits/stdc++.h> #define R register #define IT map&l ...

  6. bzoj 4916: 神犇和蒟蒻 (杜教筛+莫比乌斯反演)

    题目大意: 读入n. 第一行输出“1”(不带引号). 第二行输出$\sum_{i=1}^n i\phi(i)$. 题解: 所以说那个$\sum\mu$是在开玩笑么=.= 设$f(n)=n\phi(n) ...

  7. 51nod 1237 最大公约数之和 V3(杜教筛)

    [题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1237 [题目大意] 求[1,n][1,n]最大公约数之和 ...

  8. 51NOD 1237 最大公约数之和 V3 [杜教筛]

    1237 最大公约数之和 V3 题意:求\(\sum_{i=1}^n\sum_{j=1}^n(i,j)\) 令\(A(n)=\sum_{i=1}^n(n,i) = \sum_{d\mid n}d \c ...

  9. 51Nod.1237.最大公约数之和 V3(莫比乌斯反演 杜教筛 欧拉函数)

    题目链接 \(Description\) \(n\leq 10^{10}\),求 \[\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\ mod\ (1e9+7)\] \(Soluti ...

随机推荐

  1. shell sed -i 指定内容追加.

    1.查看原文件中的内容 [root@testvm02 ~]# cat nrpe.cfg #command[check_users]=/usr/local/nagios/libexec/check_us ...

  2. Android持久化存储——(包含操作SQLite数据库)

    <第一行代码>读书手札 你可能会遇到的问题:解决File Explorer 中无显示问题 Android中,持久化存储,常见的一共有三种方法实现 (一.)利用文件存储 文件存储是Andro ...

  3. 题解 CF1216D 【Swords】

    大水题,感觉比C题水多了...(证明倒是挺难) 题目大意:额,这个(实在总结不出) 还是题目描述吧:仓库里有$n$种相同数量($x$把)的剑(但你不知道有多少),一天有$y$人闯进了仓库,每人拿了$z ...

  4. Linux基础-10-网络原理和基础设置

    1. 使用ifconfig命令来维护网络 1) ifconfig命令的功能:显示所有正在启动的网卡的详细信息或设定系统中网卡的IP地址. 2) 应用ifconfig命令设定网卡的IP地址: 例如:修改 ...

  5. firefox 获取xpath

    在做一个爬虫是,输入内容后,会自动显示内容,而且只能选择,不能根据输入的提交,一点就失去焦点,找不到相关内容 后来发现firefox的查看元素的最左边的类似于鼠标尖头的按钮,就是确保这种情况下,去查找 ...

  6. S04_CH02_工程移植ubuntu并一键制作启动盘

    S04_CH02_工程移植ubuntu并一键制作启动盘 2.1概述 2.2搭建硬件系统 本章硬件工程还是使用<S04_CH01_搭建工程移植LINUX/测试EMMC/VGA>所搭建的VIV ...

  7. Scratch编程:绘制七色花(七)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 绘制一朵美丽的七色花. 02 — 设计思路 使用画笔功能 ...

  8. 原生 js 录屏功能

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  9. Self寄宿

    static void Main(string[] args) { //Assembly.Load("WebApplication1, Version=1.0.0.0, Culture=ne ...

  10. 用ajax和PHP实现简单的流程管理

    首先要先有一个新建流程的页面xinjian.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...