【Project Euler】530 GCD of Divisors 莫比乌斯反演
【题目】GCD of Divisors
【题意】给定f(n)=Σd|n gcd(d,n/d)的前缀和F(n),n=10^15。
【算法】莫比乌斯反演
【题解】参考:任之洲数论函数.pdf
这个范围显然杜教筛也是做不了的,而且考虑直接化简f(n)也遇到了困难,所以考虑将前缀和的Σ一起化简。
$$F(n)=\sum_{i=1}^{n}\sum_{d|i}(d,\frac{i}{d})$$
这一步很常见的是第一重改为枚举倍数,但这样化简后面就推不下去了。
这道题必须最后转成$\sigma_0(n)$才能解出来。
所以直接枚举gcd值
$$F(n)=\sum_{d=1}^{n}d\sum_{i=1}^{n}\sum_{g|i}[(g,\frac{i}{g})=d]$$
这里gcd(g,i/g)=d,说明i中必须至少包含2个d,那么令i=i/d^2,g即可任取i的因子,最终的g和i/g各乘d即可,所以可以进行如下化简。(关键①)
$$F(n)=\sum_{d=1}^{n}d\sum_{i=1}^{\frac{n}{d^2}}\sum_{g|i}[(g,\frac{i}{g})=1]$$
转化成φ希望不大,所以直接莫比乌斯反演。
$$F(n)=\sum_{d=1}^{n}d\sum_{i=1}^{\frac{n}{d^2}}\sum_{g|i}\sum_{d'|g \cap d'|\frac{i}{g}}\mu(d')$$
$$F(n)=\sum_{d=1}^{n}\sum_{d'=1}^{n}d*\mu(d')\sum_{i=1}^{\frac{n}{d^2}}\sum_{g|i}[d'|g \cap d'|\frac{i}{g}]$$
这里和上面一样,都是要求d'|g&&d'|i/g,因此从i中提取2个d',即令i=i/d'^2。
$$F(n)=\sum_{d=1}^{n}\sum_{d'=1}^{n}d*\mu(d')\sum_{i=1}^{\frac{n}{(dd')^2}}\sum_{g|i}1$$
会发现后面是约数个数。(关键②)
$$F(n)=\sum_{d=1}^{n}\sum_{d'=1}^{n}d*\mu(d')\sum_{i=1}^{\frac{n}{(dd')^2}}\sigma_0(i)$$
前面部分发现d*μ(d')好像可以卷积到φ,考虑合并dd‘来构造卷积,令d=dd'。(关键③)
$$F(n)=\sum_{d=1}^{\sqrt{n}}\sum_{g|d}g*\mu(\frac{n}{g})\sum_{i=1}^{\frac{n}{(dd')^2}}\sigma_0(i)$$
这里d只枚举到√n,因为d>√n时后面的Σ=0,没有贡献。因此可以缩小实际枚举范围。(关键④)
然后根据狄利克雷卷积μ*id=φ可以化简
$$F(n)=\sum_{d=1}^{\sqrt{n}}\varphi(d)\sum_{i=1}^{\frac{n}{(dd')^2}}\sigma_0(i)$$
大功告成!
其中,约数个数的前缀和可以进行分块取值优化,如下
$$\sum_{i=1}^{n}\sigma_0(i)=\sum_{i=1}^{n}\sum_{d|i}1=\sum_{i=1}^{n}\sum_{j=1}^{\frac{n}{i}}1$$
$$\sum_{i=1}^{n}\sigma_0(i)=\sum_{i=1}^{n}\left \lfloor \frac{n}{i} \right \rfloor$$
然后线性筛φ的过程中求解即可。
复杂度分析:
$$\sum_{i=1}^{\sqrt{n}}O(\sqrt{\frac{n}{i^2}})=\sum_{i=1}^{\sqrt{n}}O(\frac{\sqrt{n}}{i})=O(\sqrt{n} ln \sqrt{n})$$
倒数第二步将√n提到最外面,Σ内就是调和数列,和近似为ln n。
#include<cstdio> #include<cmath> #define int long long const int maxn=32000000; int phi[maxn],n,prime[maxn],tot; int solve(int n){int pos,sum=0;for(int i=1;i<=n;i=pos+1){pos=n/(n/i);sum+=(pos-i+1)*(n/i);}return sum; } #undef int int main(){ #define int long longscanf("%lld",&n);int ans=1*solve(n),N=(int)sqrt(n)+1;phi[1]=1;//1for(int i=2;i<=N;i++){if(!phi[i])phi[prime[++tot]=i]=i-1;for(int j=1;j<=tot&&i*prime[j]<=N;j++){if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}phi[i*prime[j]]=phi[i]*(prime[j]-1);}ans+=phi[i]*solve(n/(i*i));}printf("%lld",ans);return 0; }
View Code
转载于:https://www.cnblogs.com/onioncyc/p/8488255.html
【Project Euler】530 GCD of Divisors 莫比乌斯反演相关推荐
- 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)
先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...
- BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)
BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演) 手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/ ...
- P2257 YY的GCD (莫比乌斯反演)
[题目链接] https://www.luogu.org/problemnew/show/P2257 // luogu-judger-enable-o2 /* -------------------- ...
- BZOJ 2820 YY的GCD 莫比乌斯反演
题意:链接 方法:莫比乌斯反演 解析: 这题跟上一篇博客有一点差别,当然我们能够考虑枚举素数这个大暴力.只是当你A掉这道题后发现正解?都将近5s时.就放弃了这个念头. 相同的式子我们能够直接搬过来.p ...
- BZOJ 2820 YY的GCD 莫比乌斯反演
2820: YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y) ...
- 【bzoj2820】YY的GCD 莫比乌斯反演
题目描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必然不会了,于是 ...
- P2257-YY的GCD【莫比乌斯反演】
正题 题目链接:https://www.luogu.com.cn/problem/P2257 题目大意 给出n,mn,mn,m,求∑i=1n∑j=1m[gcd(i,j)∈p]\sum_{i=1}^n\ ...
- hdu1695 GCD(莫比乌斯反演)
题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...
- HYSBZ - 2818 Gcd —— 莫比乌斯反演
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 8172 Solved: 3609 Description 给定整数N,求1&l ...
最新文章
- Pytorch学习 - Task6 PyTorch常见的损失函数和优化器使用
- js随机跳转域名_【教程】无需域名和服务器搭建属于自己的导航页!!!
- poe交换机的作用和优点
- linux dhcp客户端配置文件,各个版本DHCP配置文件的整理
- Bootstrap 堆叠式导航
- 最大功率点跟踪MPPT
- 【期末复习】微机原理与接口技术
- MIME 类型大全,你值得收藏
- 计算机桌面来回闪烁,电脑桌面图标一直闪
- 2021江苏考试院高考成绩查询入口,江苏省教育考试院2021年江苏高考成绩查询时间及系统入口...
- Android 局部刷新
- 跨交换机VLAN的配置实验
- 通过这一篇文章,可以把Java中的类加载器了解的七七八八了
- 沪深A股分析数据市场表现信息API接口(JSON标准格式,Get请求方式)
- MATLAB基于多目标算法的冷热电联供型综合能源系统运行优化
- python清空运行界面_如何清除python界面
- 记录自己学习GD32F103R 使用fmc的过程
- windows 以管理员身份打开命令行窗口
- 安卓仿ios控制中可录屏_iOS那些耗电的设定
- Windows必备的10款软件,提升办公效率!