常见数论函数
1) u ( n ) , e ( n ) , I ( n ) u(n),\ e(n),\ I(n) u(n), e(n), I(n)
u ( n ) ≡ 1 , n ≥ 1 u(n)\equiv1,\ n\geq1 u(n)≡1, n≥1
e ( n ) = n , n ≥ 1 e(n)=n,\ n\geq1 e(n)=n, n≥1
I ( n ) = { 1 , n = 1 0 , n > 1 I(n)=\begin{cases}1,\quad n=1\\0,\quad n>1\end{cases} I(n)={1,n=10,n>1
2) d ( n ) d(n) d(n)
n n n的所有正除数的个数,含1和 n n n本身: d ( n ) = ∑ d ∣ n 1 d(n)=\sum_{d\mid n}1 d(n)=∑d∣n1
完全分解: n = p 1 k 1 p 2 k 2 ⋯ p s k s , { n > 1 } n=p_1^{k_1}p_2^{k_2}\cdots p_s^{k_s},\ \{n>1\} n=p1k1p2k2⋯psks, {n>1} , d ( 1 ) = 1 d(1)=1 d(1)=1
d ( n ) = ∏ i = 1 s ( k i + 1 ) d(n)=\prod_{i=1}^s(k_i+1) d(n)=∏i=1s(ki+1)
可乘函数可使用线性筛:
p p p存放质数,用d表示约数个数,num表示最小质因子出现次数。考虑 n > 1 n>1 n>1。
d ( p ) = 2 , n u m ( p ) = 1 d(p)=2, num(p)=1 d(p)=2,num(p)=1
设 d = n p d=\frac n p d=pn, p p p为 n n n的最小质因子:
p ∣ d : n u m ( n ) = n u m ( d ) + 1 , d ( n ) = d ( d ) × ( n u m ( n ) + 1 ) n u m ( d ) + 1 p\mid d:\quad num(n)=num(d)+1,\quad d(n)=\frac{d(d)\times (num(n)+1)}{num(d)+1} p∣d:num(n)=num(d)+1,d(n)=num(d)+1d(d)×(num(n)+1)
考虑 d , p d,p d,p互质,因为为可乘函数:
p ∤ d : n u m ( n ) = 1 , d ( n ) = d ( d ) × d ( p ) p\nmid d:\quad num(n)=1,\quad d(n)=d(d)\times d(p) p∤d:num(n)=1,d(n)=d(d)×d(p)
//数组 d, num, p
//bool v int tot, n
void pre(){
d[1]=1, tot=0;
for(int i=2; i<=n; i++){
if(!v[i]) p[++tot]=i, d[i]=2, num[i]=1;
for(int j=1; j<=tot && i<=n/p[j]; j++){
v[p[j]*i]=1;
if(i%p[j]==0){
num[i*p[j]]=num[i]+1;
d[i*p[j]]=d[i]/(num[i]+1)*(num[i*p[j]]+1);
break;
}
num[i*p[j]]=1;
d[i*p[j]]=d[i]*d[p[j]];
}
}
}
3) Ω ( n ) \Omega(n) Ω(n)
n n n的全部素因子的个数 Ω ( n ) \Omega(n) Ω(n)。
Ω ( 1 ) = 0 \Omega(1)=0 Ω(1)=0
Ω ( n ) = \Omega(n)= Ω(n)= ∑ i = 1 s a i \sum_{i=1}^sa_i ∑i=1sai
int b[maxn];
int cnt[maxn];
void pre() {
for(int i=2; i<maxn; i++) {
if(b[i]!=0) continue;
for(int j=i; j<maxn; j+=i) {
if(b[j]==0) b[j]=i;
}
}
cnt[2]=1;
for(int i=3; i<maxn; i++)
cnt[i]=cnt[i/b[i]]+1;
return;
}
4) ω ( n ) \omega(n) ω(n)
n n n的不同素因子个数 ω ( n ) \omega(n) ω(n)。
ω ( 1 ) = 0 , ω ( n ) = s \omega(1)=0,\quad\omega(n)=s ω(1)=0,ω(n)=s
bool vis[maxn];
int cnt[maxn];
void pre() {
for(int i=2; i<maxn; i++) {
if(vis[i]!=0) continue;
cnt[i]=1;
for(int j=i+i; j<maxn; j+=i) {
cnt[j]++, vis[j]=1;
}
}
return;
}
5) σ λ ( n ) \sigma_\lambda(n) σλ(n)
n n n的正除数的幂和函数 σ λ ( n ) , λ \sigma_\lambda(n),\ \lambda σλ(n), λ为实数。
σ λ ( n ) = ∑ d ∣ n d λ \sigma_\lambda(n)=\sum_{d\mid n}d^\lambda σλ(n)=∑d∣ndλ
特殊的,约数和: λ = 1 \lambda=1 λ=1时, σ ( n ) = ∑ d ∣ n d \sigma(n)=\sum_{d\mid n}d σ(n)=∑d∣nd
完全分解: n = p 1 k 1 p 2 k 2 ⋯ p s k s , { n > 1 } n=p_1^{k_1}p_2^{k_2}\cdots p_s^{k_s},\ \{n>1\} n=p1k1p2k2⋯psks, {n>1} , d ( 1 ) = 1 d(1)=1 d(1)=1
σ ( n ) = ∏ i = 1 s ( 1 + p i + p i 2 + ⋯ + p i k i ) = ∏ i = 1 s ∑ j = 0 k i p i j \sigma(n)=\prod_{i=1}^s(1+p_i+p_i^2+\dots+p_i^{k_i})=\prod_{i=1}^s\sum_{j=0}^{k_i}p_i^j σ(n)=∏i=1s(1+pi+pi2+⋯+piki)=∏i=1s∑j=0kipij
又因: ∑ j = 0 k i p i j = p i k i + 1 − 1 p i − 1 \sum_{j=0}^{k_i}p_i^j=\frac{p_i^{k_i+1}-1}{p_i-1} ∑j=0kipij=pi−1piki+1−1
σ ( n ) = ∏ i = 1 s ( 1 + p i + p i 2 + ⋯ + p i k i ) = ∏ i = 1 s p i k i + 1 − 1 p i − 1 \sigma(n)=\prod_{i=1}^s(1+p_i+p_i^2+\dots+p_i^{k_i})=\prod_{i=1}^s\frac{p_i^{k_i+1}-1}{p_i-1} σ(n)=∏i=1s(1+pi+pi2+⋯+piki)=∏i=1spi−1piki+1−1
以下计算均采用前者推导。
可乘函数可使用线性筛:
p p p存放质数, f i f_i fi表示 i i i的约数和, g i g_i gi表示 i i i的最小质因子 p p p的 ∑ j = 0 k p j \sum_{j=0}^{k}p^j ∑j=0kpj 。考虑 n > 1 n>1 n>1。
g ( p ) = p + 1 , f ( p ) = i + 1 g(p)=p+1,\quad f(p)=i+1 g(p)=p+1,f(p)=i+1
设 d = n p d=\frac n p d=pn, p p p为 n n n的最小质因子:
p ∣ d : g ( n ) = g ( d ) × p + 1 , f ( n ) = f ( d ) × g ( n ) g ( d ) p\mid d:\quad g(n)=g(d)\times p+1,\quad f(n)=\frac{f(d)\times g(n)}{g(d)} p∣d:g(n)=g(d)×p+1,f(n)=g(d)f(d)×g(n)
考虑 d , p d,p d,p互质,因为为可乘函数:
p ∤ d : g ( n ) = p + 1 , f ( n ) = f ( d ) × f ( p ) p\nmid d:\quad g(n)=p+1,\quad f(n)=f(d)\times f(p) p∤d:g(n)=p+1,f(n)=f(d)×f(p)
void pre(){
g[1]=f[1]=1, tot=0;
for(int i=2; i<=n; i++){
if(!v[i]) p[++tot]=i, g[i]=i+1, f[i]=i+1;
for(int j=1; j<=tot && i<=n/p[j]; j++){
v[p[j]*i]=1;
if(i%p[j]==0){
g[i*p[j]]=g[i]*p[j]+1;
f[i*p[j]]=f[i]/g[i]*g[i*p[j]];
break;
}
g[i*p[j]]=p[j]+1;
f[i*p[j]]=f[i]*f[p[j]];
}
}
}
注:求 σ ( n ) \sigma(n) σ(n)是否为奇数,根据第一个公式, p i = 2 p_i=2 pi=2时, k i k_i ki为任意数可,对其他 p i , k i p_i,\ k_i pi, ki必须为偶数,所以 n n n为平方数或 n / 2 n/2 n/2为平方数为充要条件。求 1 1 1到 n n n中, σ ( i ) \sigma(i) σ(i)为奇数的个数, a n s = s q r t ( n ) + s q r t ( n / 2 ) ans=sqrt(n)+sqrt(n/2) ans=sqrt(n)+sqrt(n/2)即可。
6) φ ( n ) \varphi(n) φ(n)
欧拉函数 φ ( n ) \varphi(n) φ(n):小于等于 n n n,和 n n n互质的个数。
1与任何正整数互质, φ ( 1 ) = 1 \varphi(1)=1 φ(1)=1
求解:完全分解: n = p 1 k 1 p 2 k 2 ⋯ p s k s n=p_1^{k_1}p_2^{k_2}\cdots p_s^{k_s} n=p1k1p2k2⋯psks
推导表达式,由容斥原理: φ ( n ) = n + ( − n p 1 − n p 2 − ⋯ − n p s ) + ( n p 1 p 2 + n p 1 p 3 + ⋯ + n p s − 1 p s ) … \varphi(n)=n+(-\frac{n}{p_1}-\frac{n}{p_2}-\dots-\frac{n}{p_s})+(\frac{n}{p_1p_2}+\frac{n}{p_1p_3}+\dots+\frac{n}{p_{s-1}p_s})\dots φ(n)=n+(−p1n−p2n−⋯−psn)+(p1p2n+p1p3n+⋯+ps−1psn)… φ ( n ) = ∑ S ⊆ { p 1 , p 2 … p s } ( − 1 ) ∣ S ∣ n ∏ p i ∈ S p i = n ∏ i = 1 s ( 1 − 1 p i ) \varphi(n)=\sum_{S\subseteq\{p_1,p_2\dots p_s\}}(-1)^{\mid S\mid}\frac{n}{\prod_{p_i\in S} p_i}=n\prod_{i=1}^s(1-\frac{1}{p_i}) φ(n)=∑S⊆{p1,p2…ps}(−1)∣S∣∏pi∈Spin=n∏i=1s(1−pi1)
φ ( n ) = n × ∏ i = 1 s p i − 1 p i \varphi(n)=n\times\prod_{i=1}^{s}\frac{p_i-1}{p_i} φ(n)=n×∏i=1spipi−1
int phi(int n) {
int m=(int)sqrt(n+0.5);
int ans=n;
for (int i=2; i<=m; i++)
if (n%i==0) {
ans=ans/i*(i-1);
while(n%i==0) n/=i;
}
if (n>1) ans=ans/n*(n-1);
return ans;
}
性质:
(1)为可乘函数, g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1: φ ( a × b ) = φ ( a ) × φ ( b ) \varphi(a\times b)=\varphi(a)\times\varphi(b) φ(a×b)=φ(a)×φ(b)。
(2)特殊的, n n n为奇数: φ ( 2 n ) = φ ( n ) \varphi(2n)=\varphi(n) φ(2n)=φ(n), ∵ 2 × 2 − 1 2 = 1 \because 2\times\frac{2-1}{2}=1 ∵2×22−1=1
(3) n = ∑ d ∣ n φ ( d ) n=\sum_{d\mid n}\varphi(d) n=∑d∣nφ(d) ,含 1 1 1和 n n n,证明:
法一: 要证明 e ( n ) = n ( n ≥ 1 ) e(n)=n\ (n\geq1) e(n)=n (n≥1)为 φ ( n ) \varphi(n) φ(n)的莫比乌斯变换,
只需证明 φ ( n ) \varphi(n) φ(n)为 e ( n ) e(n) e(n)的反莫比乌斯变换即可。
e ( n ) e (n) e(n)的反莫比乌斯变换: φ ( n ) = ∑ d ∣ n μ ( d ) n d \varphi(n)=\sum_{d\mid n}\mu(d)\frac n d φ(n)=∑d∣nμ(d)dn
φ ( n ) \varphi(n) φ(n)从定义式正经变换: φ ( n ) = ∑ 1 ≤ d ≤ n , ( d , n ) = 1 1 = ∑ 1 ≤ d ≤ n ∑ l ∣ ( d , n ) μ ( l ) = ∑ l ∣ n μ ( l ) ∑ 1 ≤ d ≤ n , l ∣ d 1 = ∑ l ∣ n μ ( l ) n l \varphi(n)=\sum_{1\leq d\leq n, (d,n)=1}1=\sum_{1\leq d\leq n}\sum_{l\mid (d, n)}\mu(l)=\sum_{l\mid n}\mu(l)\sum_{1\leq d\leq n,l\mid d}1=\sum_{l\mid n}\mu(l)\frac n l φ(n)=∑1≤d≤n,(d,n)=11=∑1≤d≤n∑l∣(d,n)μ(l)=∑l∣nμ(l)∑1≤d≤n,l∣d1=∑l∣nμ(l)ln
可见上下两式相等,故 φ ( n ) \varphi(n) φ(n)为 e ( n ) e(n) e(n)的反莫比乌斯变换。
法二: g c d ( a , n ) = d gcd(a,n)=d gcd(a,n)=d,按 d d d对 a a a进行分类,令 n = d k n=dk n=dk则 g c d ( a d , k ) = 1 gcd(\frac a d, k)=1 gcd(da,k)=1。固定的 d d d对应 a a a的个数为
φ ( k ) = φ ( n d ) \varphi(k)=\varphi(\frac n d) φ(k)=φ(dn),所以 n = ∑ d ∣ n φ ( n d ) = ∑ d ∣ n φ ( d ) n=\sum_{d\mid n} \varphi(\frac n d)=\sum_{d\mid n} \varphi(d) n=∑d∣nφ(dn)=∑d∣nφ(d) 。
(4)特殊的 n = p k n=p^k n=pk: φ ( n ) = p k − p k − 1 \varphi(n)=p^k-p^{k-1} φ(n)=pk−pk−1
= ( p − 1 ) × p k − 1 = n × p − 1 p =(p-1)\times p^{k-1}=n\times\frac{p-1}{p} =(p−1)×pk−1=n×pp−1,由定义可得。
可用于求 ∑ i = 1 n ∑ j = i + 1 n g c d ( i , j ) \sum_{i=1}^{n}\sum_{j=i+1}^n gcd(i, j) ∑i=1n∑j=i+1ngcd(i,j) :
显然 a n s [ n ] = a n s [ n − 1 ] + ∑ i = 1 n − 1 g c d ( i , n ) ans[n]=ans[n-1]+\sum_{i=1}^{n-1}gcd(i,n) ans[n]=ans[n−1]+∑i=1n−1gcd(i,n),仅需证明此处 ∑ i = 1 n − 1 g c d ( i , n ) = ∑ d ∣ n φ ( n d ) × d \sum_{i=1}^{n-1}gcd(i,n)=\sum_{d\mid n}\varphi(\frac n d)\times d ∑i=1n−1gcd(i,n)=∑d∣nφ(dn)×d :
按 d d d对 a a a进行分类,令 n = d k n=dk n=dk则 g c d ( a d , k ) = 1 gcd(\frac a d, k)=1 gcd(da,k)=1。固定的 d d d对应 a a a的个数为
φ ( k ) = φ ( n d ) \varphi(k)=\varphi(\frac n d) φ(k)=φ(dn),和为 φ ( n d ) × d \varphi(\frac n d)\times d φ(dn)×d 。 f ( n ) = ∑ d ∣ n φ ( n d ) × d = ( φ ∗ e ) ( n ) f(n)=\sum_{d\mid n}\varphi(\frac n d)\times d=(\varphi\ast e)(n) f(n)=∑d∣nφ(dn)×d=(φ∗e)(n),解题关键是 f ( n ) f(n) f(n)的表达式也可用线性筛,所以不会超时。因为此题 d < n d<n d<n而不是 d ≤ n d\leq n d≤n,故内层循环从 i ∗ 2 i*2 i∗2开始,而不是从 i i i开始。 ( φ ∗ e ) ( n ) (\varphi\ast e)(n) (φ∗e)(n)筛法:
for(int i=1; i<=n; i++){
for(int j=i+i; j<=n; j+=i){
f[j]+=(ll)i*(ll)phi[j/i];
}
}
筛法:
void phi_table(int n){
memset(phi, 0, sizeof(phi));
phi[1]=1;
for(int i=2; i<=n; i++)
if(!phi[i])
for(int j=i; j<=n; j+=i){
if(!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
7) μ ( n ) \mu(n) μ(n)
莫比乌斯函数 μ ( n ) \mu(n) μ(n)
μ ( n ) = { 1 , n = 1 ( − 1 ) s , n = p 1 p 2 … p s , p 1 < p 2 < ⋯ < p s 0 , 其 他 \mu(n)=\begin{cases}1,\quad &n=1\\(-1)^s,\quad &n=p_1p_2\dots p_s,\ p_1<p_2<\dots<p_s\\0,\quad &其他\end{cases} μ(n)=⎩⎪⎨⎪⎧1,(−1)s,0,n=1n=p1p2…ps, p1<p2<⋯<ps其他
线性筛:
//mu p v
//tot
void pre() {
mu[1]=1;
for(int i=2; i<=maxn-13; i++) {//注意这里的上界
if(!v[i]) mu[i]=-1, p[++tot]=i;
for(int j=1; j<=tot && i*p[j]<=maxn-13; j++) {//改上界
v[i*p[j]]=1;
if(i%p[j]==0) {
mu[i*p[j]]=0;
break;
}
mu[i*p[j]]=-mu[i];
}
}
}
8) Λ ( n ) \Lambda(n) Λ(n)
Mangoldt函数 Λ ( n ) \Lambda(n) Λ(n):
Λ ( n ) = { log p , n = p k , k ≥ 1 0 其 他 \Lambda(n)=\begin{cases}\log p,\quad &n=p^k,\ k\geq1\\0\quad &其他\end{cases} Λ(n)={logp,0n=pk, k≥1其他
9) λ ( n ) \lambda(n) λ(n)
Liouville函数 λ ( n ) \lambda(n) λ(n):
λ ( n ) = ( − 1 ) Ω ( n ) \lambda(n)=(-1)^{\Omega(n)} λ(n)=(−1)Ω(n)
可乘函数(积性函数)
f ( m n ) = f ( m ) × f ( n ) , gcd ( m , n ) = 1 f(mn)=f(m)\times f(n),\quad\gcd(m,n)=1 f(mn)=f(m)×f(n),gcd(m,n)=1
欧拉函数 φ ( n ) \varphi(n) φ(n),莫比乌斯函数 μ ( n ) \mu(n) μ(n),正因子和 σ ( n ) \sigma(n) σ(n),正因子数 d ( n ) d(n) d(n)等。
均可采用线性筛法。
可乘函数的卷积仍是可乘函数,可用线性筛:
求 f = g ∗ h f=g\ast h f=g∗h预先计算 g , h g,h g,h后,如下:
for(int i=1; i<=n; i++){
for(int j=i+i; j<=n; j+=i){
f[j]+=g[i]*h[j/i];
}
}
完全(绝对)可乘函数
f ( m n ) = f ( m ) f ( n ) f(mn)=f(m)f(n) f(mn)=f(m)f(n)
u ( n ) , e ( n ) , I ( n ) u(n),\ e(n),\ I(n) u(n), e(n), I(n)