今天终于能将这几者的关系依自己的理解好好写一写了。
积性函数
积性函数:对于任意互质的整数a,b有f(a×b) = f(a)×f(b)
的数论函数。
完全积性函数:对于任意的整数a,b有f(a×b) = f(a) × f(b)
。
常见的积性函数:
μ
:
莫比乌斯函数
φ
:
欧拉函数
ϵ
:
单位元函数
i
d
:
单位函数
I
:
恒等函数
σ
:
约数和函数
d
:
约数个数函数(除数函数)
\mu:莫比乌斯函数\\ \varphi:欧拉函数\\ \epsilon:单位元函数\\ id:单位函数\\ I:恒等函数\\ \sigma:约数和函数\\ d:约数个数函数(除数函数)\\
μ:莫比乌斯函数φ:欧拉函数ϵ:单位元函数id:单位函数I:恒等函数σ:约数和函数d:约数个数函数(除数函数)
- 较常用的积性函数:
狄利克雷卷积
- 先定义数论函数的的加法和数乘:
加法: ( F + G ) ( i ) = F ( i ) + G ( i ) (F+G)(i) = F(i)+G(i) (F+G)(i)=F(i)+G(i);数乘: ( x F ) ( i ) = x F ( i ) (xF)(i) = xF(i) (xF)(i)=xF(i)
其中
F+G
表示新函数H(i) = F(i) + G(i)
两个数论函数 F = G F = G F=G的充要条件是 ∀ n ∈ N + , F ( n ) = G ( n ) \forall n \in \mathbb{N^+},F(n) = G(n) ∀n∈N+,F(n)=G(n)。
- 定义数论函数的狄利克雷卷积
*
如下:
设 G ( n ) , F ( n ) G(n),F(n) G(n),F(n)是两个数论函数,则其狄利克雷卷积为: T ( n ) = F ( n ) ∗ G ( n ) = ∑ d ∣ n F ( n ) G ( n d ) T(n) = F(n) * G(n) = \sum_{d|n}F(n)G(\frac{n}{d}) T(n)=F(n)∗G(n)=d∣n∑F(n)G(dn)
等价形式: T ( n ) = ∑ i × j F ( i ) G ( j ) T(n) = \sum_{i\times j}F(i)G(j) T(n)=∑i×jF(i)G(j),这个形式常用于证明某些性质。
- 定义狄利克雷卷积的逆元:
对于 F ( 1 ) ≠ 0 F(1) \neq 0 F(1)=0,都存在 F F F
*
G = ϵ G = \epsilon G=ϵ,称 G G G是 F F F的逆元,记作: F − 1 F^{-1} F−1F ( 1 ) ≠ 0 F(1) \neq 0 F(1)=0的原因是: ( F ∗ F − 1 ) ( 1 ) = ∑ i j = 1 F ( i ) F ( j ) − 1 = F ( 1 ) F ( 1 ) − 1 = 1 (F*F^{-1})(1) = \sum_{ij=1}F(i)F(j)^{-1} = F(1)F(1)^{-1} = 1 (F∗F−1)(1)=∑ij=1F(i)F(j)−1=F(1)F(1)−1=1,因此 F ( 1 ) ≠ 0 F(1) \neq 0 F(1)=0。
- 可得 μ − 1 = I \mu^{-1} = I μ−1=I
证: μ ∗ I = ∑ d ∣ n μ ( n d ) = ∑ d ∣ n μ ( d ) = [ ( n = = 1 ) ] = ϵ \mu * I = \sum_{d|n}\mu(\frac{n}{d}) = \sum_{d|n}\mu(d)=[(n==1)]=\epsilon μ∗I=∑d∣nμ(dn)=∑d∣nμ(d)=[(n==1)]=ϵ
- 狄利克雷卷积的性质:
设 F , G F,G F,G是两个积性函数,有:
- 单位函数的运算: ϵ ∗ F = F \epsilon * F= F ϵ∗F=F
- F ∗ G F*G F∗G是积性函数
- F − 1 F^{-1} F−1也是积性函数
- 交换律: F ∗ G = G ∗ F F*G=G*F F∗G=G∗F
- 结合律: ( F ∗ G ) ∗ H = F ∗ ( G ∗ H ) (F*G)*H=F*(G*H) (F∗G)∗H=F∗(G∗H)
- 分配率: ( F + G ) ∗ H = F ∗ H + G ∗ H (F+G)*H = F*H+G*H (F+G)∗H=F∗H+G∗H
莫比乌斯反演
可由狄利克雷卷积得到:
- G ( n ) = ∑ d ∣ n F ( d ) ⇒ F ( n ) = ∑ d ∣ n G ( d ) μ ( n d ) G(n)=\sum_{d|n}F(d) \Rightarrow F(n) = \sum_{d|n}G(d)\mu(\frac{n}{d}) G(n)=∑d∣nF(d)⇒F(n)=∑d∣nG(d)μ(dn)
因为有 G = F ∗ I ( ⇐ G ( n ) = ∑ d ∣ n F ( d ) ) G=F*I(\Leftarrow G(n)=\sum_{d|n}F(d)) G=F∗I(⇐G(n)=∑d∣nF(d))
又因为 F = F ∗ ϵ , ϵ = I ∗ μ F=F* \epsilon ,\epsilon=I*\mu F=F∗ϵ,ϵ=I∗μ,
可得: F = F ∗ ϵ = F ∗ I ∗ μ = G ∗ u = ∑ d ∣ n G ( d ) u ( n d ) F=F*\epsilon=F*I*\mu=G*u=\sum_{d|n}G(d)u(\frac{n}{d}) F=F∗ϵ=F∗I∗μ=G∗u=∑d∣nG(d)u(dn)
- G ( d ) = ∑ d ∣ n F ( n ) ⇒ F ( d ) = ∑ d ∣ n G ( n ) μ ( n d ) G(d) = \sum_{d|n}F(n)\Rightarrow F(d) = \sum_{d|n}G(n)\mu(\frac{n}{d}) G(d)=∑d∣nF(n)⇒F(d)=∑d∣nG(n)μ(dn)
也可通过上面得证,具体见:数学/数论专题-学习笔记:莫比乌斯反演
欧拉函数与莫比乌斯函数的关系
- φ = i d ∗ u = ∑ d ∣ n d μ ( n d ) = ∑ d ∣ n n d μ ( d ) ( 两边除 n ) ⇒ φ ( n ) n = ∑ d ∣ n μ ( d ) d ( 个人感觉还是 φ ( n ) = ∑ d ∣ n d μ ( n d ) 好记 ) \varphi = id * u \\= \sum_{d|n}d\mu(\frac{n}{d}) \\= \sum_{d|n}\frac{n}{d}\mu(d) \\(两边除n)\\ \Rightarrow \frac{\varphi(n)}{n} = \sum_{d|n}\frac{\mu(d)}{d}\\(个人感觉还是\varphi(n)=\sum_{d|n}d\mu(\frac{n}{d})好记) φ=id∗u=∑d∣ndμ(dn)=∑d∣ndnμ(d)(两边除n)⇒nφ(n)=∑d∣ndμ(d)(个人感觉还是φ(n)=∑d∣ndμ(dn)好记)
- φ = i d ∗ μ i d = φ ∗ μ − 1 = φ ∗ I ⇒ n = ∑ d ∣ n φ ( d ) ⇒ φ ( n ) = n − ∑ d ∣ n , d < n φ ( d ) \varphi = id*\mu \\ id=\varphi*\mu^{-1}=\varphi*I \\ \Rightarrow n=\sum_{d|n}\varphi(d)\\ \Rightarrow \varphi(n) = n-\sum_{d|n,d<n}\varphi(d) φ=id∗μid=φ∗μ−1=φ∗I⇒n=∑d∣nφ(d)⇒φ(n)=n−∑d∣n,d<nφ(d)
总结: φ ( n ) = ∑ d ∣ n d μ ( n d ) = n − ∑ d ∣ n , d < n φ ( d ) \varphi(n)=\sum_{d|n}d\mu(\frac{n}{d})= n-\sum_{d|n,d<n}\varphi(d) φ(n)=∑d∣ndμ(dn)=n−∑d∣n,d<nφ(d)
and
n = ∑ d ∣ n φ ( d ) n=\sum_{d|n}\varphi(d) n=∑d∣nφ(d)
杜教筛
用途:可以在低于线性的时间复杂度内求解积性函数的前缀和。
时间复杂度: O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)
-
公式(具体推导见数论学习笔记2之杜教筛初探(含例题练习)):
令 h = f ∗ g , G 为要求的函数 适用条件: ∑ i = 1 n h ( i ) , ∑ i = 1 n f ( i ) 好求 则 ∑ i = 1 n g ( i ) 就可套该公式求出 令 : H ( n ) = ∑ i = 1 n h ( i ) = ∑ i = 1 n ( f ∗ g ) ( i ) 令 : S ( n ) = ∑ i = 1 n g ( i ) 可得 : S ( n ) = H ( n ) − ∑ d = 2 n f ( d ) g ( n d ) f ( 1 ) 令h=f*g,G为要求的函数\\ 适用条件:\sum_{i=1}^{n}h(i),\sum_{i=1}^{n}f(i)好求\\ 则\sum_{i=1}^{n}g(i)就可套该公式求出\\ 令:H(n)=\sum_{i=1}^{n}h(i)=\sum_{i=1}^{n}(f*g)(i)\\ 令:S(n)=\sum_{i=1}^{n}g(i)\\ 可得:S(n) = \frac{H(n) - \sum_{d=2}^{n}f(d)g(\frac{n}{d})\\}{f(1)} 令h=f∗g,G为要求的函数适用条件:i=1∑nh(i),i=1∑nf(i)好求则i=1∑ng(i)就可套该公式求出令:H(n)=i=1∑nh(i)=i=1∑n(f∗g)(i)令:S(n)=i=1∑ng(i)可得:S(n)=f(1)H(n)−∑d=2nf(d)g(dn) -
应用
- 求 ∑ i = 1 n φ ( i ) \sum_{i=1}^{n}\varphi(i) ∑i=1nφ(i)
因为: i d = φ ∗ I id = \varphi * I id=φ∗I
则令 g = φ , f = I , h = i d g = \varphi,f = I,h=id g=φ,f=I,h=id
带入上式得:
S ( n ) = H ( n ) − ∑ d = 2 n f ( d ) g ( n d ) f ( 1 ) = n ( n + 1 ) 2 − S ( n d ) 1 = n ( n + 1 ) 2 − S ( n d ) S(n) = \frac{H(n) - \sum_{d=2}^{n}f(d)g(\frac{n}{d})\\}{f(1)}\\ = \frac{\frac{n(n+1)}{2}-S(\frac{n}{d})}{1}\\=\frac{n(n+1)}{2}-S(\frac{n}{d}) S(n)=f(1)H(n)−∑d=2nf(d)g(dn)=12n(n+1)−S(dn)=2n(n+1)−S(dn)
- 求 ∑ i = 1 n μ ( i ) \sum_{i=1}^{n}\mu(i) ∑i=1nμ(i)
因为: ϵ = μ ∗ I \epsilon = \mu * I ϵ=μ∗I
则令 g = μ , f = I , h = ϵ g = \mu,f = I,h=\epsilon g=μ,f=I,h=ϵ
带入上式得:
S ( n ) = H ( n ) − ∑ d = 2 n f ( d ) g ( n d ) f ( 1 ) = 1 − S ( n d ) 1 = 1 − S ( n d ) S(n) = \frac{H(n) - \sum_{d=2}^{n}f(d)g(\frac{n}{d})\\}{f(1)}\\ = \frac{1-S(\frac{n}{d})}{1}\\=1-S(\frac{n}{d}) S(n)=f(1)H(n)−∑d=2nf(d)g(dn)=11−S(dn)=1−S(dn)
Code板子
线性筛法求积性函数
1. 积性函数
//d(n):n正因子个数 -- d(nm) = d(n) * d(m);n,m需要互质;
const int N = 1e7 + 10;
int primes[N], tot, d[N], cnt[N];
bool st[N];
int calc_d(int x, int k)
{
int res = 1;
while(k)
{
if(k & 1) res = res * x;
x *= x;
k >>= 1;
}
int ans = 0;
for(int i = 1; i <= res / i; i ++)
if(res % i == 0)
{
ans ++;
if(res / i != i) ans ++;
}
return ans;
}
void init()
{
d[1] = 1;
for(int i = 2; i < N; i ++)
{
if(!st[i]) primes[tot ++] = i, d[i] = 2, cnt[i] = 1;
for(int j = 0; primes[j] * i < N; j ++)
{
st[primes[j] * i] = true;
if(i % primes[j] == 0)//pj之前已经是i的质因子了
{
cnt[i * primes[j]] = cnt[i] + 1;
//先将pj对d[i]的贡献去掉,此时i(去掉pj贡献)与pj互质,可以使用积性函数的性质求d[i*pj]
d[i * primes[j]] = d[i] / calc_d(primes[j], cnt[i]) * calc_d(primes[j], cnt[i] + 1);
break;
}
cnt[i * primes[j]] = 1;
d[i * primes[j]] = d[i] * 2;
}
}
}
2.完全积性函数
/*
f(n) = n ^ N --> f(nm) = (nm)^ N = n^N * m^N = f(n)(m)
故f(n)为积性函数(n,m不需要互质)
int(1e6) = 4M char(1e6) = 1M
*/
const int N = 2e7, mod = 1e9 + 7;
LL primes[N], tot, f[N], n;
bool st[N];
LL calc_f(LL x)
{
LL res = 1, k = n;
while(k)
{
if(k & 1) res = res * x % mod;
x = (LL)x * x % mod;
k >>= 1;
}
return res % mod;
}
void init()
{
f[1] = 1;
for(int i = 2; i <= n; i ++)
{
if(!st[i]) primes[tot ++] = i, f[i] = calc_f(i);
for(int j = 0; (LL)primes[j] * i <= n; j ++)
{
st[i * primes[j]] = true;
//f(nm) = f(n)f(m)不需要互质,就不用分开计算f(i * pj)
f[i * primes[j]] = (LL)f[i] * f[primes[j]] % mod;
if(i % primes[j] == 0) break;
}
}
}
杜教筛板子
const int N = 1e7 + 10;
LL primes[N], tot, mu[N], phi[N];//积性函数都可以用线性筛算
bool st[N];
unordered_map<int, LL> ans_mu, ans_phi;
void init()
{
mu[1] = phi[1] = 1;
for(int i = 2; i < N; i ++)
{
if(!st[i]) primes[tot ++] = i, mu[i] = -1, phi[i] = i - 1;
for(int j = 0; primes[j] * i < N; j ++)
{
st[i * primes[j]] = true;
if(i % primes[j] == 0)
{
phi[i * primes[j]] = phi[i] * primes[j];
mu[i * primes[j]] = 0;
break;
}
mu[i * primes[j]] = -mu[i];
phi[i * primes[j]] = phi[i] * (primes[j] - 1);
}
}
for(int i = 2; i < N; i ++) mu[i] += mu[i - 1], phi[i] += phi[i - 1];
}
LL calc_mu(LL x)//求莫比乌斯函数前缀和
{
if(x < N) return mu[x];//预处理
if(ans_mu[x]) return ans_mu[x];//记忆化
LL res = 1;
for(LL l = 2, r; l <= x; l = r + 1)
{
r = x / (x / l);
res -= (r - l + 1) * calc_mu(x / l);
}
ans_mu[x] = res;
return res;
}
LL calc_phi(LL x)//求欧拉函数前缀和
{
if(x < N) return phi[x];//预处理
if(ans_phi[x]) return ans_phi[x];//记忆化
LL res = 1ll * x * (x + 1) / 2;
for(LL l = 2, r; l <= x; l = r + 1)
{
r = x / (x / l);
res -= (r - l + 1) * calc_phi(x / l);
}
ans_phi[x] = res;
return res;
}
参考
数论学习笔记2之杜教筛初探(含例题练习)
浅谈一类积性函数的前缀和
数学/数论专题-学习笔记:狄利克雷卷积
数学/数论专题-学习笔记:莫比乌斯反演
数学/数论专题:莫比乌斯函数与欧拉函数