【题目】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=;
int phi[maxn],n,prime[maxn],tot;
int solve(int n){
int pos,sum=;
for(int i=;i<=n;i=pos+){
pos=n/(n/i);
sum+=(pos-i+)*(n/i);
}
return sum;
}
#undef int
int main(){
#define int long long
scanf("%lld",&n);
int ans=*solve(n),N=(int)sqrt(n)+;phi[]=;//
for(int i=;i<=N;i++){
if(!phi[i])phi[prime[++tot]=i]=i-;
for(int j=;j<=tot&&i*prime[j]<=N;j++){
if(i%prime[j]==){phi[i*prime[j]]=phi[i]*prime[j];break;}
phi[i*prime[j]]=phi[i]*(prime[j]-);
}
ans+=phi[i]*solve(n/(i*i));
}
printf("%lld",ans);
return ;
}

【Project Euler】530 GCD of Divisors 莫比乌斯反演的更多相关文章

  1. 【CJOJ2512】gcd之和(莫比乌斯反演)

    [CJOJ2512]gcd之和(莫比乌斯反演) 题面 给定\(n,m(n,m<=10^7)\) 求 \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j)\] 题解 首先把公因数直 ...

  2. bnu——GCD SUM (莫比乌斯反演)

    题目:GCD SUM 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=39872 算法:莫比乌斯反演.优化 #include<stdio.h& ...

  3. GCD HDU - 1695 莫比乌斯反演入门

    题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101 感觉讲的很好的一个博客:https://www.cnblogs.com/ ...

  4. HDU - 4675 GCD of Sequence (莫比乌斯反演+组合数学)

    题意:给出序列[a1..aN],整数M和k,求对1-M中的每个整数d,构建新的序列[b1...bN],使其满足: 1. \(1 \le bi \le M\) 2. \(gcd(b 1, b 2, -, ...

  5. [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)

    题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算​$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...

  6. 【HDU4947】GCD Array(莫比乌斯反演+树状数组)

    点此看题面 大致题意: 一个长度为\(n\)的数组,实现两种操作:将满足\(gcd(i,k)=d\)的\(a_i\)加上\(v\),询问\(\sum_{i=1}^xa_i\). 对于修改操作的推式子 ...

  7. 数学--数论--HDU 4675 GCD of Sequence(莫比乌斯反演+卢卡斯定理求组合数+乘法逆元+快速幂取模)

    先放知识点: 莫比乌斯反演 卢卡斯定理求组合数 乘法逆元 快速幂取模 GCD of Sequence Alice is playing a game with Bob. Alice shows N i ...

  8. UOJ#33. 【UR #2】树上GCD 点分治 莫比乌斯反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ33.html 题解 首先我们把问题转化成处理一个数组 ans ,其中 ans[i] 表示 d(u,a) 和 ...

  9. 51nod 1594 Gcd and Phi(莫比乌斯反演)

    题目链接 传送门 思路 如果这题是这样的: \[ F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\phi(gcd(i,j)) \] 那么我们可能会想到下 ...

随机推荐

  1. 第三章 ServerSpcket用法详解

    构造ServerSocket ServerSocket的构造方法如下: ServerSocket() //Creates an unbound server socket. ServerSocket( ...

  2. 继承&构造函数

    子父类中的构造函数的特点. 在子类构造对象时,发现,访问子类构造函数时,父类也运行了. 为什么呢? 原因是:在子类的构造函数中第一行有一个默认的隐式语句. super(); 子类的实例化过程:子类中所 ...

  3. LR监控apache服务器

    开启mod_status模块功能,在LR的controller中找到apache资源图双击并右键添加度量,如下图:      添加apache服务器IP地址.选择系统平台.添加需要监控的计数器即可进行 ...

  4. 【vue】index.html main.js app.vue index.js怎么结合的? 怎么打包的?搜集的信息

    转载:https://blog.csdn.net/yudiandemingzi/article/details/80247137 怎么结合的: 一.启动项目 第一步:cmd进入项目文件里,运行npm ...

  5. iOS 关于MVC和MVVM设计模式的那些事

    一.概述 在 iOS 开发中,MVC(Model View Controller)是构建iOS App的标准模式,是苹果推荐的一个用来组织代码的权威范式.Apple甚至是这么说的.在MVC下,所有的对 ...

  6. caffe框架下目标检测——faster-rcnn实战篇问题集锦

    1.问题 解决方案:没编译好,需要在lib下编译make 需要在caffe-fast-rcnn下编译make或者make all -j16  ,还需要make pycaffe 2.问题 解决方案:/p ...

  7. 【Treeview】遍历本地磁盘

    一.前言 Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配.ImageList控件用于提供小图片给TreeView控件,DatagridView通常显 ...

  8. 【BZOJ1565】【NOI2009】植物大战僵尸(网络流)

    [BZOJ1565][NOI2009]植物大战僵尸(网络流) 题面 BZOJ 洛谷 题解 做了这么多神仙题,终于有一道能够凭借自己智商能够想出来的题目了.... 好感动. 这就是一个比较裸的最小割模型 ...

  9. 洛谷 3201 [HNOI2009]梦幻布丁 解题报告

    3201 [HNOI2009]梦幻布丁 题目描述 \(N\)个布丁摆成一行,进行\(M\)次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为\(1,2,2 ...

  10. 洛谷 P4585 [FJOI2015]火星商店问题 解题报告

    P4585 [FJOI2015]火星商店问题 题目描述 火星上的一条商业街里按照商店的编号\(1,2,\dots,n\) ,依次排列着\(n\)个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非 ...