#6229. 这是一道简单的数学题

推式子

∑i=1n∑j=1ilcm(i,j)gcd(i,j)=(∑i=1n∑j=1nlcm(i,j)gcd(i,j)+n)∗inv2所以重点求∑i=1n∑j=1nlcm(i,j)gcd(i,j)=∑i=1n∑j=1nijgcd(i,j)2=∑d=1n∑i=1nd∑j=1ndij(gcd(i,j)==1)=∑d=1n∑k=1ndμ(k)k2(∑i=1nkdi)2我们另t=kd,得到∑t=1n(∑i=1nti)2∑k∣tμ(k)k2接下来就是考虑如何在非线性的时间内筛选出∑k∣tμ(k)k2的前缀和来我们设f(n)=(μid2∗I)(n),也就是∑k∣tμ(k)k2的卷积形式。g(n)=id2,显然有f(n)∗g(n)=μid2∗I∗id2μid2∗id2=∑d∣nμ(d)d2(nd)2=n2ϵ=ϵ所以有f(n)∗g(n)=I套进杜教筛里面去得到S(n)=∑i=1nI−∑d=2nd2S(nd)\sum_{i = 1} ^{n} \sum_{j = 1} ^{i} \frac{lcm(i, j)}{gcd(i, j)}\\ = (\sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \frac{lcm(i, j)}{gcd(i, j)} + n) * inv2\\ 所以重点求\sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \frac{lcm(i, j)}{gcd(i, j)}\\ = \sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \frac{ij}{gcd(i, j) ^ 2}\\ = \sum_{d = 1} ^{n} \sum_{i = 1} ^{\frac{n}{d}} \sum_{j = 1} ^{\frac{n}{d}}ij (gcd(i, j) == 1)\\ = \sum_{d = 1} ^{n} \sum_{k = 1} ^{\frac{n}{d}} \mu(k) k ^ 2 (\sum_{i = 1} ^{\frac{n}{kd}} i) ^ 2\\ 我们另t = kd,得到\\ \sum_{t = 1} ^{n} (\sum_{i = 1} ^{\frac{n}{t}}i) ^ 2 \sum_{k \mid t} \mu(k) k ^ 2\\ 接下来就是考虑如何在非线性的时间内筛选出\sum_{k \mid t} \mu(k) k ^ 2的前缀和来\\ 我们设f(n) = (\mu\ id ^ 2 * I)(n),也就是\sum_{k \mid t} \mu(k) k ^ 2的卷积形式。\\ g(n) = id ^ 2, 显然有f(n) * g(n) = \mu\ id ^ 2 * I * id ^ 2\\ \mu\ id ^ 2 * id ^ 2 = \sum_{d \mid n} \mu(d) d ^ 2 (\frac{n}{d}) ^ 2 = n ^ 2\epsilon = \epsilon\\ 所以有f(n) * g(n) = I\\ 套进杜教筛里面去得到S(n) = \sum_{i = 1} ^{n} I - \sum_{d = 2} ^{n} d ^ 2S(\frac{n}{d})\\ i=1∑n​j=1∑i​gcd(i,j)lcm(i,j)​=(i=1∑n​j=1∑n​gcd(i,j)lcm(i,j)​+n)∗inv2所以重点求i=1∑n​j=1∑n​gcd(i,j)lcm(i,j)​=i=1∑n​j=1∑n​gcd(i,j)2ij​=d=1∑n​i=1∑dn​​j=1∑dn​​ij(gcd(i,j)==1)=d=1∑n​k=1∑dn​​μ(k)k2(i=1∑kdn​​i)2我们另t=kd,得到t=1∑n​(i=1∑tn​​i)2k∣t∑​μ(k)k2接下来就是考虑如何在非线性的时间内筛选出k∣t∑​μ(k)k2的前缀和来我们设f(n)=(μ id2∗I)(n),也就是k∣t∑​μ(k)k2的卷积形式。g(n)=id2,显然有f(n)∗g(n)=μ id2∗I∗id2μ id2∗id2=d∣n∑​μ(d)d2(dn​)2=n2ϵ=ϵ所以有f(n)∗g(n)=I套进杜教筛里面去得到S(n)=i=1∑n​I−d=2∑n​d2S(dn​)

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define endl "\n"using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;
const double eps = 1e-7;const int mod = 1e9 + 7, N = 1e6 + 10, inv6 = 166666668, inv2 = 500000004;int prime[N], mu[N], cnt;ll sum[N];bool st[N];ll quick_pow(ll a, int n) {ll ans = 1;while(n) {if(n & 1) ans = ans * a % mod;a = a * a % mod;n >>= 1;}return ans;
}void init() {mu[1] = 1;for(int i = 2; i < N; i++) {if(!st[i]) {prime[cnt++] = i;mu[i] = -1;}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0)   break;mu[i * prime[j]] = -mu[i];}}for(int i = 1; i < N; i++) {for(int j = i; j < N; j += i) {sum[j] = (sum[j] + 1ll * i * i % mod * mu[i] % mod + mod) % mod;}}for(int i = 1; i < N; i++) {sum[i] = (sum[i] + sum[i - 1]) % mod;}
}ll calc1(ll n) {ll ans = 1ll * (1 + n) * n / 2 % mod;return 1ll * ans * ans % mod;
}ll calc2(ll n) {return 1ll * n * (n + 1) % mod * (2 * n + 1) % mod * inv6 % mod;
}unordered_map<int, int> ans_s;ll S(int n) {if(n < N) return sum[n];if(ans_s.count(n)) return ans_s[n];ll ans = n;for(ll l = 2, r; l <= n; l = r + 1) {r = n / (n / l);ans = (ans - 1ll * (calc2(r) - calc2(l - 1) + mod) % mod * S(n / l) % mod + mod) % mod;}return ans_s[n] = ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);// cout << quick_pow(2, mod - 2) << endl;init();ll n, ans = 0;scanf("%lld", &n);for(ll l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans = (ans + 1ll * calc1(n / l) * ((S(r) - S(l - 1) + mod) % mod) % mod) % mod;}printf("%lld\n", 1ll * (ans + n) * inv2 % mod);return 0;
}

#6229. 这是一道简单的数学题(反演 + 杜教筛)相关推荐

  1. P3768 简单的数学题(杜教筛)

    P3768 简单的数学题 推式子 ∑i=1n∑j=1mijgcd(i,j)=∑d=1nd∑i=1n∑j=1mij(gcd(i,j)=d)=∑d=1nd3∑i=1nd∑j=1ndij∑k∣gcd(i,j ...

  2. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  3. 【bzoj4176】Lucas的数论 莫比乌斯反演+杜教筛

    题目描述 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i<=N" ...

  4. BZOJ3930-莫比乌斯反演+杜教筛

    题目的意思很简单,求给定区间内的gcd=k的个数,这应该是传统的莫比乌斯反演了. 有两种思路,一种是直接将里面变成gcd=1,然后里面看作元函数用莫比乌斯函数和恒等函数展开,然后改变求和顺序. 还有一 ...

  5. matlab狄利克雷函数,数论入门1——莫比乌斯函数,欧拉函数,狄利克雷卷积,线性筛,莫比乌斯反演,杜教筛...

    数论入门1 一个菜鸡对数论的一点点理解... 莫比乌斯函数 定义函数$\mu(n)$为: 当n有平方因子时,$\mu(n)=0$. 当n没有平方因子时,$\mu(n)=(-1)^{\omega(n)} ...

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

    [LOJ#572]Misaka Network 与求和 https://www.cnblogs.com/cjyyb/p/10170630.html 看到次大质因子就可以想到是min_25筛了,然后只需 ...

  7. 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出n,kn,kn,k求 ∑i1=1n∑i2=1n...∑ik=1ngcd(fi1,f ...

  8. P4450-双亲数,P5221-Product,P6055-[RC-02]GCD【莫比乌斯反演,杜教筛】

    除了最后一题都比较简单就写一起了 P4450-双亲数 题目链接:https://www.luogu.com.cn/problem/P4450 题目大意 给出A,B,dA,B,dA,B,d求有多少对(a ...

  9. 51nod1220-约数之和【莫比乌斯反演,杜教筛】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1220 题目大意 给出nnn,求∑i=1n∑j=1nσ(i∗j)\sum_ ...

最新文章

  1. Oracle 存储过程之通用分页查询
  2. 光流 | 基于Lukas-Kanade光流法的目标跟踪(附C++代码)
  3. jquery $(document).ready() 与window.onload的区别
  4. 树莓派raspbian OS 64位系统下载和更换源
  5. web html分块加载,javascript – 使用webpack代码拆分,如何加载块和HTML布局?
  6. arm跑操作系统的意义_不太远的猜想:当ARM和鸿蒙OS在笔记本领域相遇,颠覆已无可避免...
  7. 使用IPV6 ACL对telnet登陆进行限定
  8. 征集大家的网站如何防范DDOS攻击解决方案
  9. 64 位Instant Client连接64位PLSQL(win10)
  10. ajax怎样上传多张图片,多图片Ajax上传
  11. 有哪些计算机法人快捷键,tras企业版操作说明.doc-广东省国家税务局.doc
  12. 那些脱颖而出的云计算认证
  13. 中文汉字和英文数字的unicode编码范围
  14. 方正璞华:硬核攻关,自主创新,推动印前处理自动化云流程走向世界
  15. Kotlin - 伴生对象与静态成员
  16. 万洲金业:投资现货黄金的收益与风险如何平衡?
  17. 找不到 xxx 的DNS地址,现在正在诊断问题
  18. 125KHz唤醒功能2.4GHz单发射芯片-Si24R2H
  19. python error “quote_from_bytes() expected bytes”
  20. 为什么在Unix下编程,而不在Linux下编程

热门文章

  1. python三大特征六大原则_面向对象程序设计(Object Oriented Programming)的三大特性,六大原则...
  2. 原来医生的处方不是随便乱写的...
  3. 真正的男人要勇于承担责任......
  4. 地球不是圆的,别让教科书限制了孩子的想象力!
  5. 18张难以置信的照片,封面这张你就没见过
  6. 天赋差的程序员,难道就只能半途而废吗?
  7. exchange服务器维护模式命令,Exchange服务器系列课程之七--维护邮件服务器(二)
  8. java .this的用法_JAVA中this用法小结
  9. 普通用户nginx访问不了_Nginx降权启动之使用普通用户管理 | it运维_it技术_linux运维-追梦人博客...
  10. sql计算留存_SQL基础第七讲:关于用户留存率的计算