常见数论函数模板

常见数论函数
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, n1

e ( n ) = n ,   n ≥ 1 e(n)=n,\ n\geq1 e(n)=n, n1

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)=dn1

完全分解: 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=p1k1p2k2psks, {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} pd: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) pd: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)=dndλ

特殊的,约数和 λ = 1 \lambda=1 λ=1时, σ ( n ) = ∑ d ∣ n d \sigma(n)=\sum_{d\mid n}d σ(n)=dnd

完全分解: 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=p1k1p2k2psks, {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=1sj=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=pi1piki+11

σ ( 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=1spi1piki+11

以下计算均采用前者推导。

可乘函数可使用线性筛:

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)} pd: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) pd: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=p1k1p2k2psks

推导表达式,由容斥原理: φ ( 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+(p1np2npsn)+(p1p2n+p1p3n++ps1psn) φ ( 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,p2ps}(1)SpiSpin=ni=1s(1pi1)

φ ( 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=1spipi1

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×221=1

(3) n = ∑ d ∣ n φ ( d ) n=\sum_{d\mid n}\varphi(d) n=dnφ(d) ,含 1 1 1 n n n,证明:

法一: 要证明 e ( n ) = n   ( n ≥ 1 ) e(n)=n\ (n\geq1) e(n)=n (n1) φ ( 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)=dnμ(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)=1dn,(d,n)=11=1dnl(d,n)μ(l)=lnμ(l)1dn,ld1=lnμ(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=dnφ(dn)=dnφ(d)

(4)特殊的 n = p k n=p^k n=pk φ ( n ) = p k − p k − 1 \varphi(n)=p^k-p^{k-1} φ(n)=pkpk1

= ( p − 1 ) × p k − 1 = n × p − 1 p =(p-1)\times p^{k-1}=n\times\frac{p-1}{p} =(p1)×pk1=n×pp1,由定义可得。

可用于求 ∑ 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=1nj=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[n1]+i=1n1gcd(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=1n1gcd(i,n)=dnφ(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)=dnφ(dn)×d=(φe)(n)解题关键是 f ( n ) f(n) f(n)的表达式也可用线性筛,所以不会超时。因为此题 d < n d<n d<n而不是 d ≤ n d\leq n dn,故内层循环从 i ∗ 2 i*2 i2开始,而不是从 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=p1p2ps, 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, k1

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=gh预先计算 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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值