最大公约数 : Greatest Common Divisor, 简称 : gcd
定义符号 : d|nd|n: n%d=0n%d=0
定义函数 : φ(n)φ(n): 欧拉函数
定义函数 : μ(n)μ(n): 莫比乌斯函数
一维形式: ∑i=1ngcd(n,i)∑i=1ngcd(n,i)
1. 1≤n≤1061≤n≤106
相信大家都会
for(int i=1;i<=n;++i)
ans+=gcd(n,i);
2. 1≤n≤1091≤n≤109
设: gcd(n,i)=dgcd(n,i)=d
显然: n%d=0n%d=0
原问题转换为:
∑d|nd⋅∑i=1n[gcd(n,i)=d]∑d|nd⋅∑i=1n[gcd(n,i)=d]
∑d|nd⋅∑i=1nd[gcd(nd,i)=1]∑d|nd⋅∑i=1nd[gcd(nd,i)=1]
∑d|nd⋅φ(nd)∑d|nd⋅φ(nd)
O(n−−√)O(n)枚举nn的因子, 再计算φ(nd)φ(nd)就好了
3. 1≤n≤10121≤n≤1012
不难发现∑d|nd⋅φ(nd)∑d|nd⋅φ(nd)是狄利克雷卷积形式
f(n)=nf(n)=n 与 φ(n)φ(n)均为积性函数
所以g(n)=∑d|nd⋅φ(nd)g(n)=∑d|nd⋅φ(nd)为积性函数
若: n=pe11⋅pe22⋯pekkp1,p2,⋯,pkn=p1e1⋅p2e2⋯pkekp1,p2,⋯,pk均为质数
那么: g(n)=g(pe11)⋅g(pe22)×⋯×g(pekk)g(n)=g(p1e1)⋅g(p2e2)×⋯×g(pkek)
考虑: g(pk)=∑d|pkd⋅φ(pkd)pg(pk)=∑d|pkd⋅φ(pkd)p为质数
即: g(pk)=∑i=0kpk−i⋅φ(pi)=∑i=1kpk−i⋅φ(pi)+pk⋅φ(1)g(pk)=∑i=0kpk−i⋅φ(pi)=∑i=1kpk−i⋅φ(pi)+pk⋅φ(1)
g(pk)=pk+∑i=1kpk−i⋅(pi−pi−1)=pk+∑i=1k(pk−pk−1)g(pk)=pk+∑i=1kpk−i⋅(pi−pi−1)=pk+∑i=1k(pk−pk−1)
g(pk)=(k+1)⋅pk−k⋅pk−1g(pk)=(k+1)⋅pk−k⋅pk−1
复杂度: O(n−−√)O(n)
二维形式: ∑i=1n∑j=1mgcd(i,j)∑i=1n∑j=1mgcd(i,j)
1. 1≤n,m≤1031≤n,m≤103
相信大家都会
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
ans+=gcd(i,j);
2. 1≤n=m≤105q1≤n=m≤105q组询问
设: g(n)=∑i=1ngcd(n,i)g(n)=∑i=1ngcd(n,i)
我们已经可以在O(n−−√)O(n)内得到g(n)g(n)
∑i=1n∑j=1ngcd(i,j)=2⋅∑i=1n∑j=1igcd(i,j)−∑i=1ngcd(i,i)=2⋅∑i=1n∑j=1igcd(i,j)−(n+1)⋅n2=2⋅∑i=1ng(i)−(n+1)⋅n2(8)(9)(10)(8)∑i=1n∑j=1ngcd(i,j)=2⋅∑i=1n∑j=1igcd(i,j)−∑i=1ngcd(i,i)(9)=2⋅∑i=1n∑j=1igcd(i,j)−(n+1)⋅n2(10)=2⋅∑i=1ng(i)−(n+1)⋅n2
复杂度: O(nn−−√+q)O(nn+q)
3. 1≤n=m≤107q1≤n=m≤107q组询问
解法1:
枚举: gcd(i,j)=d∈[1,n]gcd(i,j)=d∈[1,n]
原问题转换为:
∑d=1nd∑i=1n∑j=1n[gcd(i,j)=d]∑d=1nd∑i=1n∑j=1n[gcd(i,j)=d]
∑d=1nd∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)=1]∑d=1nd∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)=1]
设: f(n)=∑i=1n∑j=1n[gcd(i,j)=1]f(n)=∑i=1n∑j=1n[gcd(i,j)=1]
设: g(n)=∑i=1n∑j=1i[gcd(i,j)=1]=∑i=1nφ(i)g(n)=∑i=1n∑j=1i[gcd(i,j)=1]=∑i=1nφ(i)
不难发现: f(n)=2⋅g(n)−1f(n)=2⋅g(n)−1
∑d=1nd∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)=1]=∑d=1nd⋅f(⌊nd⌋)=∑d=1nd⋅(2⋅g(⌊nd⌋)−1)∑d=1nd∑i=1⌊nd⌋∑j=1⌊nd⌋[gcd(i,j)=1]=∑d=1nd⋅f(⌊nd⌋)=∑d=1nd⋅(2⋅g(⌊nd⌋)−1)
显然: ∑d=1nd⋅(2⋅g(⌊nd⌋)−1)∑d=1nd⋅(2⋅g(⌊nd⌋)−1)可以分块
复杂度: O(n+q⋅n−−√)O(n+q⋅n)
解法2:
∑i=1n∑j=1ngcd(i,j)=2⋅∑i=1n∑j=1igcd(i,j)−(n+1)⋅n2∑i=1n∑j=1ngcd(i,j)=2⋅∑i=1n∑j=1igcd(i,j)−(n+1)⋅n2
设: g(n)=∑i=1n∑j=1igcd(i,j)=∑i=1n∑d|id⋅φ(id)g(n)=∑i=1n∑j=1igcd(i,j)=∑i=1n∑d|id⋅φ(id)
∑d|nd⋅φ(nd)∑d|nd⋅φ(nd)是积性函数, 可以线性筛, 同时维护它的前缀和就可以O(1)O(1)回答询问
复杂度: O(n+q)O(n+q)
4. 1≤n≤m≤1051≤n≤m≤105
枚举: gcd(i,j)=d∈[1,n]gcd(i,j)=d∈[1,n]
原问题转换为:
∑d=1nd∑i=1n∑j=1m[gcd(i,j)=d]∑d=1nd∑i=1n∑j=1m[gcd(i,j)=d]
设: g(x)=∑i=1n∑j=1m[gcd(i,j)=x]g(x)=∑i=1n∑j=1m[gcd(i,j)=x]
设: f(x)=∑i=1n∑j=1m[x∣∣gcd(i,j)]=⌊nx⌋⋅⌊mx⌋f(x)=∑i=1n∑j=1m[x|gcd(i,j)]=⌊nx⌋⋅⌊mx⌋
莫比乌斯反演: f(x)=∑x|dg(d)⇒g(x)=∑x|dμ(dx)f(d)f(x)=∑x|dg(d)⇒g(x)=∑x|dμ(dx)f(d)
g(x)=∑x|dμ(dx)⋅⌊nd⌋⋅⌊md⌋g(x)=∑x|dμ(dx)⋅⌊nd⌋⋅⌊md⌋
∑d=1nd∑d|iμ(id)⋅⌊ni⌋⋅⌊mi⌋∑d=1nd∑d|iμ(id)⋅⌊ni⌋⋅⌊mi⌋
复杂度: O(nlogn)O(nlogn)
5. 1≤n≤m≤1061≤n≤m≤106
∑d=1nd∑i=1n∑j=1m[gcd(i,j)=d]⇒∑d=1nd∑i=1⌊nd⌋∑j=1⌊md⌋[gcd(i,j)=1]∑d=1nd∑i=1n∑j=1m[gcd(i,j)=d]⇒∑d=1nd∑i=1⌊nd⌋∑j=1⌊md⌋[gcd(i,j)=1]
莫比乌斯反演得: ∑i=1⌊nd⌋∑j=1⌊md⌋[gcd(i,j)=1]=∑i=1⌊nd⌋μ(i)⋅⌊⌊nd⌋i⌋⋅⌊⌊md⌋i⌋∑i=1⌊nd⌋∑j=1⌊md⌋[gcd(i,j)=1]=∑i=1⌊nd⌋μ(i)⋅⌊⌊nd⌋i⌋⋅⌊⌊md⌋i⌋
得: ∑d=1nd∑i=1⌊nd⌋μ(i)⋅⌊⌊nd⌋i⌋⋅⌊⌊md⌋i⌋∑d=1nd∑i=1⌊nd⌋μ(i)⋅⌊⌊nd⌋i⌋⋅⌊⌊md⌋i⌋
令: f(x,y)=∑i=1xμ(i)⋅⌊xi⌋⋅⌊yi⌋f(x,y)=∑i=1xμ(i)⋅⌊xi⌋⋅⌊yi⌋
利用数论分块可以在O(x−−√+y√)O(x+y)得到函数值
同样的, 已知f(x,y)f(x,y)的值, ∑d=1nd⋅f(⌊nd⌋,⌊md⌋)∑d=1nd⋅f(⌊nd⌋,⌊md⌋)可以在O(n−−√+m−−√)O(n+m)内得到答案
所以可以分块套分块, 复杂度: O((n−−√+m−−√)2)O((n+m)2)
6. 1≤n≤m≤107q1≤n≤m≤107q组询问
∑d=1nd∑i=1⌊nd⌋μ(i)⋅⌊⌊nd⌋i⌋⋅⌊⌊md⌋i⌋=∑d=1nd∑i=1⌊nd⌋μ(i)⋅⌊ni⋅d⌋⋅⌊mi⋅d⌋∑d=1nd∑i=1⌊nd⌋μ(i)⋅⌊⌊nd⌋i⌋⋅⌊⌊md⌋i⌋=∑d=1nd∑i=1⌊nd⌋μ(i)⋅⌊ni⋅d⌋⋅⌊mi⋅d⌋
令: k=i⋅dk∈[1,n]k=i⋅dk∈[1,n]
枚举 kk:
不难发现: ∑d|kd⋅μ(kd)∑d|kd⋅μ(kd)是狄利克雷卷积形式
f(n)=nf(n)=n 与 μ(n)μ(n)均为积性函数
所以g(n)=∑d|nd⋅μ(nd)g(n)=∑d|nd⋅μ(nd)为积性函数
若: n=pe11⋅pe22⋯pekkp1,p2,⋯,pkn=p1e1⋅p2e2⋯pkekp1,p2,⋯,pk均为质数
那么: g(n)=g(pe11)⋅g(pe22)×⋯×g(pekk)g(n)=g(p1e1)⋅g(p2e2)×⋯×g(pkek)
考虑: g(pk)=∑d|pkd⋅μ(pkd)pg(pk)=∑d|pkd⋅μ(pkd)p为质数
g(pk)=∑i=0kpk−i⋅μ(pi)=pk−pk−1=φ(pk)g(pk)=∑i=0kpk−i⋅μ(pi)=pk−pk−1=φ(pk)
所以: g(n)=φ(n)g(n)=φ(n)
∑k=1n⌊nk⌋⋅⌊mk⌋∑d|kd⋅μ(kd)=∑k=1n⌊nk⌋⋅⌊mk⌋⋅φ(k)∑k=1n⌊nk⌋⋅⌊mk⌋∑d|kd⋅μ(kd)=∑k=1n⌊nk⌋⋅⌊mk⌋⋅φ(k)
复杂度: O(n+q⋅(n−−√+m−−√))O(n+q⋅(n+m))
7. 1≤n=m≤10111≤n=m≤1011
用杜教筛来求欧拉函数φ(x)φ(x)前缀和s(n)s(n)
s(n)=(n+1)⋅n2−∑i=2ns(⌊ni⌋)s(n)=(n+1)⋅n2−∑i=2ns(⌊ni⌋)
∑d=1nd⋅(2⋅s(⌊nd⌋)−1)∑d=1nd⋅(2⋅s(⌊nd⌋)−1)(3)
或
∑k=1n⌊nk⌋2⋅φ(k)∑k=1n⌊nk⌋2⋅φ(k)(6)
复杂度: O(n23)O(n23)
总结:
对于 m=nm=n的情况
我们得到了22个不同的等式:
它们之间是不是有一些联系呢?
∑d=1nd⋅(2⋅s(⌊nd⌋)−1)=(∑d=1n2⋅d⋅s(⌊nd⌋))−(n+1)⋅n2=(∑d=1n2⋅d⋅s(⌊nd⌋))−∑d=1ns(⌊nd⌋)=∑d=1n(2⋅d−1)⋅s(⌊nd⌋)=∑d=1n(2⋅d−1)∑i=1⌊nd⌋φ(i)=∑d=1n∑i=1⌊nd⌋(2⋅d−1)⋅φ(i)=∑d=1n∑d|i(2⋅d−1)⋅φ(id)=∑i=1n∑d|i(2⋅d−1)⋅φ(id)=∑i=1n(f×g)(i)(11)(12)(13)(14)(15)(16)(17)(18)(19)(11)∑d=1nd⋅(2⋅s(⌊nd⌋)−1)(12)=(∑d=1n2⋅d⋅s(⌊nd⌋))−(n+1)⋅n2(13)=(∑d=1n2⋅d⋅s(⌊nd⌋))−∑d=1ns(⌊nd⌋)(14)=∑d=1n(2⋅d−1)⋅s(⌊nd⌋)(15)=∑d=1n(2⋅d−1)∑i=1⌊nd⌋φ(i)(16)=∑d=1n∑i=1⌊nd⌋(2⋅d−1)⋅φ(i)(17)=∑d=1n∑d|i(2⋅d−1)⋅φ(id)(18)=∑i=1n∑d|i(2⋅d−1)⋅φ(id)(19)=∑i=1n(f×g)(i)
其中{f(x)=φ(x)g(x)=2⋅x−1{f(x)=φ(x)g(x)=2⋅x−1
∑k=1n⌊nk⌋2⋅φ(k)=∑k=1n∑i=1⌊nk⌋(2⋅i−1)⋅φ(k)=∑k=1n∑k|i(2⋅ik−1)⋅φ(k)=∑i=1n∑k|i(2⋅ik−1)⋅φ(k)=∑i=1n(g×f)(i)(20)(21)(22)(23)(24)(20)∑k=1n⌊nk⌋2⋅φ(k)(21)=∑k=1n∑i=1⌊nk⌋(2⋅i−1)⋅φ(k)(22)=∑k=1n∑k|i(2⋅ik−1)⋅φ(k)(23)=∑i=1n∑k|i(2⋅ik−1)⋅φ(k)(24)=∑i=1n(g×f)(i)
所以这两个等式都表达的是同一个狄利克雷卷积的前缀和, 自然也就相等了