文章目录
- 前言
- 整除分块
- 代码
- 积性函数
- 线性筛
- 狄利克雷卷积
- 莫比乌斯反演
- trick
所谓莫比乌斯反演,就是莫比乌斯进行的反演
(逃)
前言
在一些需要整除的式子和 gcd,lcm\gcd,\operatorname{lcm}gcd,lcm 等问题中发挥作用。
整除分块
整除分块是莫反的必要前置。
结论:
对于 i≤ni\le ni≤n,满足 ⌊nx⌋=⌊ni⌋\lfloor\dfrac{n}{x}\rfloor=\lfloor\dfrac{n}{i}\rfloor⌊xn⌋=⌊in⌋ 的最大的 xxx 为 ⌊n⌊ni⌋⌋\lfloor\dfrac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor⌊⌊in⌋n⌋。
证明:
设 k=⌊ni⌋k=\lfloor\dfrac{n}{i}\rfloork=⌊in⌋,那么就有 n=i⋅k+p(0≤p<i,p=nmodi)n=i\cdot k+p\pod{0\le p<i,p=n\bmod i}n=i⋅k+p(0≤p<i,p=nmodi),设 x=i+dx=i+dx=i+d,同理有 n=(i+d)⋅k+p′(0≤p′<x,p′=nmodx)n=(i+d)\cdot k+p'\pod{0\le p'<x,p'=n\bmod x}n=(i+d)⋅k+p′(0≤p′<x,p′=nmodx),化简得 p′=p−dkp'=p-dkp′=p−dk,由于 p′>0p'>0p′>0,有 d<⌊pk⌋d<\lfloor\dfrac{p}{k}\rfloord<⌊kp⌋。
那么就有:
xmax=i+dmaxx_{max}=i+d_{max}xmax=i+dmax
=i+⌊pk⌋=i+\lfloor\frac{p}{k}\rfloor=i+⌊kp⌋
=i+⌊nmodik⌋=i+\lfloor\frac{n\bmod i}{k}\rfloor=i+⌊knmodi⌋
=⌊i+n−⌊ni⌋⋅i⌊ni⌋⌋=\lfloor i+\frac{n-\lfloor \dfrac{n}{i}\rfloor\cdot i}{\lfloor\dfrac{n}{i}\rfloor}\rfloor=⌊i+⌊in⌋n−⌊in⌋⋅i⌋
=⌊n⌊ni⌋⌋=\lfloor \frac{n}{\lfloor\dfrac{n}{i}\rfloor}\rfloor=⌊⌊in⌋n⌋
证毕。
代码
(计算因数个数的前缀和)
ll calc(ll x){if(x<=0) return 0ll ans=0;for(ll l=1,r;l<=x;l=r+1){r=x/(x/l);(ans+=1ll*(r-l+1)*(x/l))%=mod;}return ans;
}
积性函数
定义:
如果 f:Z+→Cf:\mathbb{Z^+}\to \mathbb{C}f:Z+→C,则称 f(n)f(n)f(n) 为一个数论函数。
如果 f(n)f(n)f(n) 为一个数论函数,且对于 p⊥qp\perp qp⊥q,f(pq)=f(p)f(q)f(pq)=f(p)f(q)f(pq)=f(p)f(q),则称 f(n)f(n)f(n) 为一个积性函数。
如果 f(n)f(n)f(n) 为一个积性函数,且对于任意 p,qp,qp,q,f(pq)=f(p)f(q)f(pq)=f(p)f(q)f(pq)=f(p)f(q),则称 f(n)f(n)f(n) 为一个完全积性函数。
一个重要的性质:
对于 p⊥q,d1∣p,d2∣1p\perp q,d_1|p,d_2|1p⊥q,d1∣p,d2∣1,则有 (d1d2)∣(pq)(d_1d_2)|(pq)(d1d2)∣(pq)
证明:结合基本算数定理,d1,d2d_1,d_2d1,d2 必然没有共同因子,相乘后各个因子的次数还是不超过原来的 p,qp,qp,q 对应位置的次数。
常见的积性函数:
- 除数函数:σk(n)=∑d∣ndk\sigma_k(n)=\sum_{d|n}d^kσk(n)=∑d∣ndk。
证明:
p⊥q→σk(p)σk(q)=(∑d1∣pd1k)(∑d2∣qd2k)=∑(d1d2)∣(pq)(d1d2)k=σk(pq)p\perp q\to\sigma_k(p)\sigma_k(q)=(\sum_{d_1|p}d_1^k)(\sum_{d_2|q}d_2^k)=\sum_{(d_1d_2)|(pq)}(d_1d_2)^k=\sigma_k(pq)p⊥q→σk(p)σk(q)=(∑d1∣pd1k)(∑d2∣qd2k)=∑(d1d2)∣(pq)(d1d2)k=σk(pq)。
-
约数个数函数:τ(n)=σ0(n)=∑d∣n1\tau(n)=\sigma_0(n)=\sum_{d|n}1τ(n)=σ0(n)=∑d∣n1。
-
约数和函数:σ(n)=∑d∣nd\sigma(n)=\sum_{d|n}dσ(n)=∑d∣nd。
-
欧拉函数:φ(n)=∑i=1n[gcd(i,n)=1]\varphi(n)=\sum_{i=1}^n[\gcd(i,n)=1]φ(n)=∑i=1n[gcd(i,n)=1]。
证明:
p⊥q→φ(p)φk(q)=(p∏a∈prime,a∣pa−1a)(q∏b∈prime,b∣qb−1b)=pq∏c∈prime,c∣pqc−1c=φ(pq)p\perp q\to\varphi_(p)\varphi_k(q)=(p\prod_{a\in prime,a|p}\dfrac{a-1}{a})(q\prod_{b\in prime,b|q}\dfrac{b-1}{b})=pq\prod_{c\in prime,c|pq}\dfrac{c-1}{c}=\varphi(pq)p⊥q→φ(p)φk(q)=(p∏a∈prime,a∣paa−1)(q∏b∈prime,b∣qbb−1)=pq∏c∈prime,c∣pqcc−1=φ(pq)
性质:φ(n)=∑i=1n[gcd(i,n)=1]∗i=φ(n)+[n==1]2\varphi(n)=\sum_{i=1}^n[\gcd(i,n)=1]*i=\dfrac{\varphi(n)+[n==1]}{2}φ(n)=∑i=1n[gcd(i,n)=1]∗i=2φ(n)+[n==1]。
证明:对于 gcd(d,n)=1\gcd(d,n)=1gcd(d,n)=1,同样有 gcd(n−d,n)=1\gcd(n-d,n)=1gcd(n−d,n)=1,所有和 nnn 互质的数都是对称分布的。
- 莫比乌斯函数:μ(n)\mu(n)μ(n),μ(1)=1\mu(1)=1μ(1)=1,对于无平方因子的数 n=∏ikpin=\prod_i^k p_in=∏ikpi,μ(n)=(−1)k\mu(n)=(-1)^kμ(n)=(−1)k;对于有平方因子的数 nnn,μ(n)=0\mu(n)=0μ(n)=0。
- 元函数:e(n)=[n=1]e(n)=[n=1]e(n)=[n=1]。完全积性。
- 恒等函数:I(n)=1I(n)=1I(n)=1。完全积性。也可写作 1(n)=11(n)=11(n)=1。
- 单位函数:id(n)=nid(n)=nid(n)=n。完全积性。
- 恒等函数:idk(n)=nkid^k(n)=n^kidk(n)=nk。完全积性。
线性筛
利用线性筛筛出 μ\muμ 这样的积性函数。
int mu[N];
int p[N],tot,vis[N];
void init(int n){mu[1]=1;for(int i=2;i<=n;i++){if(!vis[i]) vis[i]=1,mu[i]=-1,p[++tot]=i;for(int j=1;j<=tot&&p[j]<=n/i;j++){vis[i*p[j]]=1;if(i%p[j]==0){mu[i*p[j]]=0;break;}mu[i*p[j]]=-mu[i];}}
}
狄利克雷卷积
定义:
对于数论函数 f,gf,gf,g,h(n)=f∗g=∑d∣nf(d)g(nd)h(n)=f*g=\sum_{d|n}f(d)g(\dfrac{n}{d})h(n)=f∗g=∑d∣nf(d)g(dn) 叫做 f,gf,gf,g 的狄利克雷卷积。
狄利克雷卷积可以理解为乘法意义上的卷积,满足交换律、分配律,结合律。
若 f,gf,gf,g 均为积性函数,那么 h=f∗gh=f*gh=f∗g 也是积性函数。
证明:p⊥q→h(p)h(q)=(∑d1∣pf(d1)g(pd1))(∑d2∣qf(d2)g(qd2))=∑(d1d2)∣(pq)f(d1)f(d2)g(pd1)g(qd2)=∑(d1d2)∣(pq)f(d1d2)g(pqd1d2)=h(pq)p\perp q\to h(p)h(q)=(\sum_{d_1|p}f(d_1)g(\frac{p}{d_1}))(\sum_{d_2|q}f(d_2)g(\frac{q}{d_2}))=\sum_{(d_1d_2)|(pq)}f(d_1)f(d_2)g(\dfrac{p}{d_1})g(\dfrac{q}{d_2})=\sum_{(d_1d_2)|(pq)}f(d_1d_2)g(\dfrac{pq}{d_1d_2})=h(pq)p⊥q→h(p)h(q)=(∑d1∣pf(d1)g(d1p))(∑d2∣qf(d2)g(d2q))=∑(d1d2)∣(pq)f(d1)f(d2)g(d1p)g(d2q)=∑(d1d2)∣(pq)f(d1d2)g(d1d2pq)=h(pq)
1∗1=τ1*1=\tau1∗1=τ
1∗id=σ1*id=\sigma1∗id=σ
证明:直接展开即可得。
∑d∣nμ(d)=[n==1]\sum_{d|n}\mu(d)=[n==1]∑d∣nμ(d)=[n==1],即 μ∗1=e\mu*1=eμ∗1=e,两者互为逆元。
证明:μ(1)=0\mu(1)=0μ(1)=0 显然成立,对于 n>1n>1n>1,由于含平方因子的 μ\muμ 均为0,只需要考虑 nnn 所有不含平方因子的因数。
设 nnn 有 mmm 个质因子,从这些质因子中任意选择(每项最多一个)构成因数,就有:∑d∣nμ(d)=∑i=0m(mi)(−1)i=(1−1)m=0\sum_{d|n}\mu(d)=\sum_{i=0}^m\binom{m}{i}(-1)^i=(1-1)^m=0∑d∣nμ(d)=∑i=0m(im)(−1)i=(1−1)m=0。
[gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)[\gcd(i,j)=1]=\sum_{d|\gcd(i,j)}\mu(d)[gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)
证明:直接令上一个式子 ∑d∣nμ(d)=[n==1]\sum_{d|n}\mu(d)=[n==1]∑d∣nμ(d)=[n==1] 的 n=gcd(i,j)n=\gcd(i,j)n=gcd(i,j) 即可得。
φ=μ∗id\varphi=\mu*idφ=μ∗id
证明:(μ∗id)(n)=∑d∣nμ(d)nd(\mu*id)(n)=\sum_{d|n}\mu(d)\dfrac{n}{d}(μ∗id)(n)=∑d∣nμ(d)dn,右边的式子就可以理解成容斥筛掉所有和 nnn 不互质的数。
id=φ∗1,n=id(n)=∑d∣nφ(n)id=\varphi*1,n=id(n)=\sum_{d|n}\varphi(n)id=φ∗1,n=id(n)=∑d∣nφ(n)
证明:id=id∗e=id∗μ∗1=φ∗1id=id*e=id*\mu*1=\varphi*1id=id∗e=id∗μ∗1=φ∗1
莫比乌斯反演
若 g(n)=∑d∣nf(d)g(n)=\sum_{d|n}f(d)g(n)=∑d∣nf(d),那么 f(n)=∑d∣nμ(d)g(nd)f(n)=\sum_{d|n}\mu(d)g(\frac{n}{d})f(n)=∑d∣nμ(d)g(dn)。
证明:
- f=f∗1∗μ=g∗μf=f*1*\mu=g*\muf=f∗1∗μ=g∗μ。
- ∑d∣nμ(d)g(nd)=∑d∣nμ(d)∑k∣ndf(k)=∑kd∣nμ(d)f(k)=∑k∣nf(k)∑d∣nkμ(d)\sum_{d|n}\mu(d)g(\dfrac{n}{d})=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}f(k)=\sum_{kd|n}\mu(d)f(k)=\sum_{k|n}f(k)\sum_{d|\frac{n}{k}}\mu(d)∑d∣nμ(d)g(dn)=∑d∣nμ(d)∑k∣dnf(k)=∑kd∣nμ(d)f(k)=∑k∣nf(k)∑d∣knμ(d)
=∑k∣nf(k)[nk=1]=f(n)=\sum_{k|n}f(k)[\dfrac{n}{k}=1]=f(n)=∑k∣nf(k)[kn=1]=f(n)
若 g(n)=∑n∣df(d)g(n)=\sum_{n|d}f(d)g(n)=∑n∣df(d),那么 f(n)=∑n∣dμ(dn)g(d)f(n)=\sum_{n|d}\mu(\dfrac{d}{n})g(d)f(n)=∑n∣dμ(nd)g(d)。
证明:∑n∣dμ(dn)g(d)=∑k=1∞μ(k)g(kn)=∑k=1∞μ(k)∑d∣knf(d)=∑n∣df(d)∑k∣dnμ(k)\sum_{n|d}\mu(\dfrac{d}{n})g(d)=\sum_{k=1}^{\infty}\mu(k)g(kn)=\sum_{k=1}^{\infty}\mu(k)\sum_{d|kn}f(d)=\sum_{n|d}f(d)\sum_{k|\frac{d}{n}}\mu(k)∑n∣dμ(nd)g(d)=∑k=1∞μ(k)g(kn)=∑k=1∞μ(k)∑d∣knf(d)=∑n∣df(d)∑k∣ndμ(k)
=∑n∣df(d)[dn=1]=f(n)=\sum_{n|d}f(d)[\dfrac{d}{n}=1]=f(n)=∑n∣df(d)[nd=1]=f(n)
trick
- 枚举倍数的一种灵活的变形:g(d)=∑d∣inf(i)=∑i=1⌊nd⌋f(i⋅d)g(d)=\sum_{d|i}^nf(i)=\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i\cdot d)g(d)=∑d∣inf(i)=∑i=1⌊dn⌋f(i⋅d)。
很显然,但有时能发挥大作用。 - [gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)[\gcd(i,j)=1]=\sum_{d|\gcd(i,j)}\mu(d)[gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)。再写一遍是因为它太重要了。
- 关于因数个数函数:τ(i⋅j)=∑x∣i,y∣j[gcd(x,y)=1]\tau(i\cdot j)=\sum_{x|i,y|j}[\gcd(x,y)=1]τ(i⋅j)=∑x∣i,y∣j[gcd(x,y)=1]。