题意:求

解:

最后一步转化是因为phi * I = Id,故Id * miu = phi

第二步是反演,中间省略了几步...

然后就这样A了......最终式子是个整除分块,后面用杜教筛求一下phi前缀和即可。

 1 #include <cstdio>
 2 #include <map>
 3
 4 typedef long long LL;
 5 const int N = 5000010, T = 5000008;
 6 const LL MO = 1000000007;
 7
 8 int p[N], top, phi[N];
 9 LL Phi[N], inv2;
10 bool vis[N];
11 std::map<LL, LL> mp;
12
13 inline void getp(int n) {
14     phi[1] = 1;
15     for(int i = 2; i <= n; i++) {
16         if(!vis[i]) {
17             p[++top] = i;
18             phi[i] = i - 1;
19         }
20         for(int j = 1; j <= top && i * p[j] <= n; j++) {
21             vis[i * p[j]] = 1;
22             if(i % p[j] == 0) {
23                 phi[i * p[j]] = phi[i] * p[j];
24                 break;
25             }
26             phi[i * p[j]] = phi[i] * (p[j] - 1);
27         }
28     }
29     for(int i = 1; i <= n; i++) {
30         Phi[i] = (Phi[i - 1] + phi[i]) % MO;
31     }
32     return;
33 }
34
35 LL getPhi(LL x) {
36     if(x <= 0) return 0;
37     if(x <= T) return Phi[x];
38     if(mp.count(x)) return mp[x];
39     LL ans = (x + 1) % MO * (x % MO) % MO * inv2 % MO;
40     for(LL i = 2, j; i <= x; i = j + 1) {
41         j = x / (x / i);
42         ans -= (j - i + 1) % MO * getPhi(x / i) % MO;
43         ans %= MO;
44     }
45     return mp[x] = (ans + MO) % MO;
46 }
47
48 int main() {
49     LL n;
50     getp(T);
51     inv2 = (MO + 1) / 2;
52     scanf("%lld", &n);
53     LL ans = 0;
54     for(LL i = 1, j; i <= n; i = j + 1) {
55         j = n / (n / i);
56         LL temp = (n / i) % MO;
57         ans += temp * temp % MO * (getPhi(j) - getPhi(i - 1) + MO) % MO;
58         ans %= MO;
59     }
60     printf("%lld\n", (ans + MO) % MO);
61     return 0;
62 }

AC代码

转载于:https://www.cnblogs.com/huyufeifei/p/10444704.html

51nod1237 最大公约数之和 V3相关推荐

  1. [51 nod 123] 最大公约数之和 V3(杜教筛)

    1237 最大公约数之和 V3 推式子 ∑i=1n∑j=1ngcd(i,j)=∑d=1nd∑i=1n∑j=1n(gcd(i,j)==d)=∑d=1nd∑i=1nd∑j=1nd(gcd(i,j)==1) ...

  2. 51nod 1237 最大公约数之和 V3

    求∑1<=i<=n∑1<=j<=ngcd(i,j) % P P = 10^9 + 7 2 <= n <= 10^10 这道题,明显就是杜教筛 推一下公式: 利用∑d ...

  3. 最大公约数之和——极限版II

    P1490 - [UVa11426 ]最大公约数之和--极限版II Description Input 输入包含至多100组数据.每组数据占一行,包含正整数N(2<=N<=1<N&l ...

  4. [51 nod 1238] 最小公倍数之和 V3(杜教筛)

    1238 最小公倍数之和 V3 推式子 ∑i=1n∑j=1nlcm(i,j)=∑i=1n∑j=1nijgcd(i,j)=∑d=1n∑i=1n∑j=1nijd(gcd(i,j)==d)=∑d=1nd∑i ...

  5. 51nod 1188 最大公约数之和 V2(欧拉函数)

    1188 最大公约数之和 V2 思路 用欧拉函数可以化简式子如下 ∑i=1n∑j=1i−1gcd(i,j)\sum_{i = 1} ^{n} \sum _{j = 1} ^{i - 1} gcd(i, ...

  6. 51nod1040 最大公约数之和,欧拉函数或积性函数

    1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6时,1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 看起来很简单 ...

  7. 51nod 1040:最大公约数之和(数论)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1040 给出一个n,求1-n这n个数,同n的最大公约数的和. ...

  8. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷--(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解--那么既然A了就来骗一波访问量吧-- (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧-- ...

  9. BZOJ 2226 [Spoj 5971] LCMSum 最大公约数之和 | 数论

    BZOJ 2226 [Spoj 5971] LCMSum 这道题和上一道题十分类似. \[\begin{align*} \sum_{i = 1}^{n}\operatorname{LCM}(i, n) ...

最新文章

  1. python运行不了control+shift+i_Python不支持 i ++ 语法的原因解析
  2. java远程桌面图片压缩问题_java用Socket实现的远程桌面浏览 内存溢出问题
  3. python3.7.4安装教程-Python3.7.4图文安装教程
  4. 12.PHP_PDO数据库抽象层
  5. Statement和PraparedStatement区别
  6. user-agent
  7. Stopwatch 类
  8. python货币转换c_货币转换 C
  9. 【拿到offer】2020农业银行校园秋季招聘面试心得
  10. 一个有意思的echarts3D树状图
  11. opencv-6-图像绘制与line 函数剖析
  12. 拼音四线三格图片_一年级拼音总结,请查收
  13. 校园宽带客户端认证程序无法继续初始化绑定通信接口网络地址失败_解决办法
  14. php 商品模块添加商品属性,添加新商品
  15. linux中用c语言编写一个经纬度转换大地坐标
  16. 工作琐事太多怎么办_待办的事情太多,如何有条不紊的进行工作呢?
  17. 编译 文件“libboost_log-vc120-mt-sgd-1_59.lib”
  18. 高等数学在c语言中的应用例子,平顶山学院《高等数学》《C语言》试题.doc
  19. 了解光隔离器的主要用途和优点
  20. Anaconda+Tushare安装运行宝笈

热门文章

  1. Sql 最简单的Sqlserver连接
  2. 读取速度贼快的省市区地址库
  3. 啊~ 五环 你比四环多一环 啊~ 五环 你比六环少一环
  4. Android 优秀博客汇总
  5. 高度固定,行数不固定的文字垂直居中问题
  6. 记录一次bug解决过程:eclipse Installed JREs 配置引出的问题
  7. div border-radius
  8. 使用System Center Operations Manager监视Exchange 2007客户端连通性(二)
  9. 十八种方法让你集中精力工作
  10. oracle中判断一个串中是否包含另一个串