5973 words
30 minutes
数论

这一部分只考虑整数

一些定义#

完全积性函数
ff为完全积性函数,则f(ab)=f(a)f(b)f(ab)=f(a)f(b)
积性函数
ff为积性函数,则在(a,b)=1(a,b)=1时,有f(ab)=f(a)f(b)f(ab)=f(a)f(b)
常见的积性函数
I(n)=1I(n)=1
ε(n)=[n=1]\varepsilon (n)=[n=1]
id(n)=nid(n)=n
φ(n)=∑i=1n[(i,n)=1]=n∏(1−1pi)\varphi (n)=\sum_{i=1}^{n} [(i,n)=1]= n\prod (1-\frac{1}{p_{i}}),pip_{i}为nn的唯一分解中互不相同的质数
μ(n)\mu (n)莫比乌斯函数,n=1n=1时,μ(n)=1\mu(n)=1,当nn的唯一分解的质数的次数都为1,μ(n)\mu(n)为−1-1的质数种类次方,否则μ(n)=0\mu(n)=0
d(n)d(n)表示nn的约数个数
σ(n)\sigma(n)表示nn的约数和
σk(n)\sigma_{k}(n)表示n的约数的kk次方的和(除数函数)

筛法#

埃拉托斯特尼筛法#

埃拉托斯特尼筛法筛素数
主体思想是逐个去掉所有质数的倍数,枚举到的下一个就是质数

int vis[N],pri[N],cnt;
void Eratosthenes(int n){
vis[0]=vis[1]=0;cnt=0;
for(int i=2;i<=n;i++)vis[i]=1;
for (int i=2;i<=n;i++){
if (vis[i]){
pri[cnt++]=i;
if (1ll*i*i>n)continue;
for (int j=i*i;j<=n;j+=i){
vis[j]=0;
}
}
}
}

线性筛(欧拉筛)#

线性筛的主体思想是让每个数都被自己最小的质因数筛掉

void Euler(int n){
cnt=0;
for (int i=2;i<=n;i++)vis[i]=0;
for (int i=2;i<=n;i++){
if (!vis[i])pri[cnt++]=i;
for (int j=1;j<=cnt;j++){
if (1ll*i*pri[j]>n)break;
vis[i*pri[j]]=1;
if (i%pri[j]==0)break;
}
}
}

注意代码中imod  pri[j]=0i \mod pri[j] = 0说明已经到了ii的最小质数,如果继续,那么接下来的数就不是被最小的质数筛掉了,以为ii的最小质数是pri[j]pri[j]

用线性筛求一些函数#

求φ(n)\varphi(n),设p1p_{1}为nn的最小质因子,且n=mp1n=m p_{1}
如果(m,p1)=1(m,p_{1})=1,φ(n)=φ(p1)×φ(m)=(p1−1)φ(m)\varphi(n)=\varphi(p_{1}) \times \varphi(m)=(p_{1}-1)\varphi(m)
如果(m,p1)≠1(m,p_{1})\neq1,φ(n)=n∏(1−1pi)=mp1∏(1−1pi)=p1φ(m)\varphi(n)=n \prod(1-\frac{1}{p_{i}})=mp_{1}\prod(1-\frac{1}{p_{i}})=p_{1}\varphi(m)

int phi[N];
void get_phi(int n){
cnt=0;phi[1]=1;
for (int i=2;i<=n;i++)vis[i]=0;
for (int i=2;i<=n;i++){
if (!vis[i])pri[++cnt]=i,phi[i]=i-1;
for (int j=1;j<=cnt;j++){
if (1ll*i*pri[j]>n)break;
if (i%pri[j]==0){
vis[i*pri[j]]=1;phi[i*pri[j]]=pri[j]*phi[i];
break;
}
vis[i*pri[j]]=1;phi[i*pri[j]]=(pri[j]-1)*phi[i];
}
}
}

求μ(n)\mu(n),设p1p_{1}为nn的最小质因子,n=mp1n=mp_{1}
μ(pk)=−1×[k=1]\mu(p^{k})=-1\times[k=1]
如果(m,p1)=1(m,p_{1})=1,μ(n)=μ(p1)×μ(m)=−1×μ(m)\mu(n)=\mu(p_{1})\times\mu(m)=-1\times\mu(m)
如果(m,p1)≠1(m,p_{1})\neq1,μ(n)=0\mu(n)=0

int mu[N];
void get_mu(int n){
cnt=0;mu[1]=1;
for (int i=2;i<=n;i++)vis[i]=0;
for (int i=2;i<=n;i++){
if (!vis[i])pri[++cnt]=i,mu[i]=-1;
for (int j=1;j<=cnt;j++){
if (1ll*i*pri[j]>n)break;
if (i%pri[j]==0){
vis[i*pri[j]]=1;mu[i*pri[j]]=0;
break;
}
vis[i*pri[j]]=1;mu[i*pri[j]]=-mu[i];
}
}
}

求d(n)d(n),设n=∏piain=\prod p_{i}^{a_{i}},d(n)=∏(ai+1)d(n)=\prod (a_{i}+1),n=p1mn=p_{1}m,p1p_{1}为nn的最小质因子
如果(m,p1)=1(m,p_{1})=1,d(n)=d(p1)d(m)=2d(m)d(n)=d(p_{1})d(m)=2d(m)
如果(m,p1)≠1(m,p_{1})\neq1,d(n)=d(p1k)d(np1k)d(n)=d(p_{1}^{k})d(\frac{n}{p_{1}^{k}}),p1k∣∣np_{1}^{k}||n
我们需要维护kk,即最小质因子的个数,令numinum_{i}为ii的最小质因子的个数,则有
如果(m,p1)=1(m,p_{1})=1,d(n)=d(p1)d(m)=2d(m)d(n)=d(p_{1})d(m)=2d(m),numn=1num_{n}=1
如果(m,p1)≠1(m,p_{1})\neq1,d(n)=d(p1k)d(np1k)=(numm+2)d(m)numm+1=(numn+1)d(m)numnd(n)=d(p_{1}^{k})d(\frac{n}{p_{1}^{k}})=\frac{(num_{m}+2)d(m)}{num_{m}+1}=\frac{(num_{n}+1)d(m)}{num_{n}},numn=numm+1num_{n}=num_{m}+1

int d[N],num[N];
void get_d(int n){
cnt=0;d[1]=1;
for (int i=2;i<=n;i++)vis[i]=0;
for (int i=2;i<=n;i++){
if (!vis[i])pri[++cnt]=i,d[i]=2,num[i]=1;
for (int j=1;j<=cnt;j++){
if (1ll*i*pri[j]>n)break;
if (i%pri[j]==0){
vis[i*pri[j]]=1;num[i*pri[j]]=num[i]+1;d[i*pri[j]]=d[i]*(num[i*pri[j]]+1)/num[i*pri[j]];
break;
}
vis[i*pri[j]]=1;num[i*pri[j]]=1;d[i*pri[j]]=2*d[i];
}
}
}

求σ(n)\sigma(n),σ(n)=∏(1+pi+...+piai)=∏piai+1−1pi−1\sigma(n)=\prod (1+p_{i}+...+p_{i}^{a_{i}})=\prod \frac{p_{i}^{a_{i}+1}-1}{p_{i}-1},n=mp1n=mp_{1},p1p_{1}为nn的最小质因子
令gi=∑t=0numip1tg_{i}=\sum_{t=0}^{num_{i}}p_{1}^{t}
如果(m,p1)=1(m,p_{1})=1,σ(n)=(1+p1)σ(m)\sigma(n)=(1+p_{1})\sigma(m),numn=1num_{n}=1,gn=1+p1g_{n}=1+p_{1}
如果(m,p1)≠1(m,p_{1})\neq1,σ(n)=σ(p1numm+1)σ(mp1numm)=(p1numm+2−1)σ(m)p1numm+1−1=gnσ(m)gm\sigma(n)=\sigma(p_{1}^{num_{m}+1})\sigma(\frac{m}{p_{1}^{num_{m}}})=\frac{(p_{1}^{num_{m}+2}-1)\sigma(m)}{p_{1}^{num_{m}+1}-1}=\frac{g_{n}\sigma(m)}{g_{m}},gn=1+p1gmg_{n}=1+p_{1}g_{m}

int dsum[N],gsum[N];
void get_dsum(int n){
cnt=0;dsum[1]=1;
for (int i=2;i<=n;i++)vis[i]=0;
for (int i=2;i<=n;i++){
if (!vis[i])pri[++cnt]=i,dsum[i]=1+i,gsum[i]=1+i;
for (int j=1;j<=cnt;j++){
if (1ll*i*pri[j]>n)break;
if (i%pri[j]==0){
vis[i*pri[j]]=1;
gsum[i*pri[j]]=pri[j]*gsum[i]+1;
dsum[i*pri[j]]=dsum[i]*(gsum[i*pri[j]])/gsum[i];
break;
}
vis[i*pri[j]]=1;
gsum[i*pri[j]]=1+pri[j];
dsum[i*pri[j]]=(1+pri[j])*dsum[i];
}
}
}

狄利克雷卷积#

(f∗g)(n)=∑d∣nf(d)g(nd)(f*g)(n)=\sum_{d|n} f(d)g(\frac{n}{d})
waitingwaiting

数论分块#

用于计算形如∑i=1nf(i)g(⌊ni⌋)\sum_{i=1}^{n}f(i)g(\lfloor \frac{n}{i} \rfloor)的式子
若能O(1)O(1)预处理ff的前缀和,则可在O(n)O(\sqrt n)的时间计算上式

一维#

先看简单情况考虑计算∑i=1n⌊ni⌋\sum_{i=1}^{n} \lfloor \frac{n}{i} \rfloor,即为f(i)=1,g(i)=if(i)=1,g(i)=i
我们按照⌊ni⌋=d\lfloor \frac{n}{i} \rfloor=d的值分块,设这块区间为[l,r][l,r]
则有d≤ni<d+1d \leq \frac{n}{i} < d+1 ,取倒数有1d+1<in≤1d\frac{1}{d+1} < \frac{i}{n} \leq \frac{1}{d},
则⌊nd+1⌋+1≤i≤⌊nd⌋\lfloor\frac{n}{d+1} \rfloor+1 \leq {i} \leq \lfloor\frac{n}{d}\rfloor
右端点为r=⌊n⌊nl⌋⌋r=\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor

向上取整#

计算∑i=1nf(i)g(⌈ni⌉)\sum_{i=1}^{n}f(i)g(\lceil \frac{n}{i} \rceil)
注意到 ⌈ni⌉=⌊n−1i⌋+1\lceil \frac{n}{i} \rceil=\lfloor \frac{n-1}{i} \rfloor+1
∑i=1nf(i)g(⌈ni⌉)=f(n)g(1)+∑i=1n−1f(i)g(⌊n−1i⌋+1)\sum_{i=1}^{n}f(i)g(\lceil \frac{n}{i} \rceil)=f(n)g(1)+\sum_{i=1}^{n-1}f(i)g(\lfloor \frac{n-1}{i} \rfloor+1)

多维#

计算∑i=1nf(i)g(⌊n1i⌋,⌊n2i⌋,...,⌊nmi⌋)\sum_{i=1}^{n}f(i)g(\lfloor \frac{n_{1}}{i} \rfloor,\lfloor \frac{n_{2}}{i} \rfloor,...,\lfloor \frac{n_{m}}{i} \rfloor)
只需要对一个ll取交集即可,r=mini=1m⌊ni⌊nil⌋⌋r=min_{i=1}^{m} {\lfloor\frac{n_{i}}{\lfloor\frac{n_{i}}{l}\rfloor}\rfloor}

任意指数#

计算∑i=1⌊nab⌋f(i)g(⌊naib⌋)\sum_{i=1}^{\lfloor n^{\frac{a}{b}} \rfloor}f(i)g(\lfloor \frac{n^{a}}{i^{b}}\rfloor)
同上可知⌊nab(d+1)1b⌋+1≤i≤⌊nabd1b⌋\lfloor\frac{n^{\frac{a}{b}}}{(d+1)^{\frac{1}{b}}} \rfloor+1 \leq {i} \leq \lfloor\frac{n^{\frac{a}{b}}}{d^{\frac{1}{b}}}\rfloor
复杂度为O(nab+1)O(n^{\frac{a}{b+1}})

莫比乌斯反演#

普通形式#

首先有恒等式∑d∣nμ(d)=[n=1]\sum_{d|n}\mu(d)=[n=1]
设n=∏piein=\prod p_{i}^{e_{i}},n′=∏pin'=\prod p_{i},则∑d∣n=∑i=0k(−1)i(ki)=(1+(−1))k=[n=1]\sum_{d|n}=\sum_{i=0}^{k}(-1)^{i}\binom{k}{i}=(1+(-1))^{k}=[n=1]
即ε=1∗μ\varepsilon=1*\mu
简单应用[gcd(i,j)=1∑d∣gcd(i,j)μ(d)=∑d[d∣i][d∣j]μ(d)[gcd(i,j)=1\sum_{d|gcd(i,j)}\mu(d)=\sum_{d}[d|i][d|j]\mu(d)
主要形式f(n)=∑d∣ng(d)<=>g(n)=∑d∣nμ(nd)f(d)f(n)=\sum_{d|n}g(d)<=>g(n)=\sum_{d|n}\mu(\frac{n}{d})f(d),可直接带入验证
上述形式等价与f=1∗g<=>g=μ∗ff=1*g<=>g=\mu*f
故μ∗f=μ∗1∗g=ϵ∗g=g\mu*f=\mu*1*g=\epsilon*g=g
对φ(n)\varphi(n)有,n=∑d∣nφ(d)n=\sum_{d|n}\varphi(d),即id=1∗φid=1*\varphi,则φ=μ∗id\varphi=\mu*id,φ(n)=∑d∣ndμ(nd)\varphi(n)=\sum_{d|n}d\mu(\frac{n}{d})
对σk(n)=∑d∣ndk\sigma_{k}(n)=\sum_{d|n}d^{k},有σk=1∗idk\sigma_{k}=1*id_{k},则idk=μ∗σkid_{k}=\mu*\sigma_{k}
对互异素因子数目函数ω(n)=∑d∣n[d∈P]\omega(n)=\sum_{d|n}[d\in P],即ω=1∗1P\omega=1*1_{P},则1P=μ∗ω1_{P}=\mu*\omega,[n∈P]=∑dμ(nd)ω(d)[n\in P]=\sum_{d}\mu(\frac{n}{d})\omega(d)

拓展形式#

f(n)=∑n∣dg(d)<=>g(n)=∑n∣dμ(dn)f(d)f(n)=\sum_{n|d}g(d)<=>g(n)=\sum_{n|d}\mu(\frac{d}{n})f(d)
f(n)=∏d∣ng(d)<=>g(n)=∏d∣nf(d)μ(nd)f(n)=\prod_{d|n}g(d)<=>g(n)=\prod_{d|n}f(d)^{\mu(\frac{n}{d})}
f(n)=∑d∣nα(nd)g(n)<=>g(n)=∑d∣nα−1(nd)f(d)f(n)=\sum_{d|n}\alpha(\frac{n}{d})g(n)<=>g(n)=\sum_{d|n}\alpha^{-1}(\frac{n}{d})f(d),即f=α∗g<=>g=α−1∗ff=\alpha*g<=>g=\alpha^{-1}*f,α−1\alpha^{-1}为α\alpha的DirichletDirichlet逆
f(n)=∑i=1ng(⌊ni⌋)<=>g(n)=∑i=1nμ(i)f(⌊ni⌋)f(n)=\sum_{i=1}^{n}g(\lfloor\frac{n}{i}\rfloor)<=>g(n)=\sum_{i=1}^{n}\mu(i)f(\lfloor\frac{n}{i}\rfloor)

DirichletDirichlet前缀和#

如果将每一个素数都看作一个维度,这就是一种高维前缀和.从小到大遍历所有素数 𝑝,并将 𝑛处的函数值累加到 𝑛𝑝处.这和EratosthenesEratosthenes筛法 的遍历顺序是一致的.因此,这一算法可以在 𝑂(𝑛log⁡log⁡𝑛)𝑂(𝑛log⁡log⁡𝑛)时间内计算出长度为 𝑛𝑛 的数列的 DirichletDirichlet 前缀和.类似地,利用逐维差分就可以在相同时间复杂度内求出数列的 DirichletDirichlet 差分.

int f[N],g[N];
void di_presum(int n){
for (int i=0;i<=n;i++)vis[i]=0,f[i]=g[i];
for (int i=2;i<=n;i++){
if (vis[i])continue;
for (int j=1,ij=i;i*j<=n;j++,ij+=j){
vis[ij]=1;
f[ij]+=g[j];
}
}
}
void di_diff(int n){
for (int i=0;i<=n;i++)vis[i]=0,g[i]=f[i];
for (int i=2;i<=n;i++){
if (vis[i])continue;
for (int j=n/i,ij=i*j;j>=1;j--,ij-=j){
vis[ij]=1;
g[ij]-=f[j];
}
}
}

杜教筛#

用低于线性的时间求S(n)=∑i=1nf(i)S(n)=\sum_{i=1}^{n}f(i)
构造一个gg,gg满足g,f∗gg,f*g的前缀和可以很快的求出
∑i=1n(f∗g)(i)=∑i=1n∑d∣if(id)g(d)=∑i=1ng(i)S(⌊ni⌋)\sum_{i=1}^{n}(f*g)(i)=\sum_{i=1}^{n}\sum_{d|i}f(\frac{i}{d})g(d)=\sum_{i=1}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor),最后一步可以这么理解f,gf,g括号内的乘积都是小于等于nn的
则g(1)S(n)=∑i=1n(f∗g)(i)−∑i=2ng(i)S(⌊ni⌋)g(1)S(n)=\sum_{i=1}^{n}(f*g)(i)-\sum_{i=2}^{n}g(i)S(\lfloor\frac{n}{i}\rfloor)
时间复杂度O(n34)O(n^{\frac{3}{4}})

Min_25筛#

低于线性时间求积性函数前缀和
要求:f(p)f(p)是关于pp的可以快速求值的完全积性函数之和;f(pc)f(p^{c})可以快速求值
pkp_{k}为第kk小的质数,p0=1p_{0}=1
lpf(n)lpf(n)为nn的最小质因数,lpf(1)=1lpf(1)=1
Fprime(n)=∑p≤nf(p)F_{prime}(n)=\sum_{p\leq n}f(p)
Fk(n)=∑i=2n[pk≤lpf(i)]f(i)F_{k}(n)=\sum_{i=2}^{n}[p_{k}\leq lpf(i)]f(i)
发现答案即为F1(n)+f(1)F_{1}(n)+f(1)

Fk(n)=∑i=2n[pk≤lpf(i)]f(i)=∑k≤i, pi2≤n∑c≥1, pic≤nf(pic)([c>1]+Fi+1(⌊n/pic⌋))+Fprime(n)−Fprime(pk−1)=∑k≤i, pi2≤n∑c≥1, pic+1≤n(f(pic+1)+f(pic)Fi+1(⌊n/pic⌋))+Fprime(n)−Fprime(pk−1)\begin{align} F_{k}(n) &= \sum_{i=2}^{n} [p_{k} \le lpf(i)] f(i) \\ &= \sum_{k \le i,\, p_{i}^{2} \le n} \sum_{c \ge 1,\, p_{i}^{c} \le n} f(p_{i}^{c}) \bigl([c > 1] + F_{i+1}(\lfloor n / p_{i}^{c} \rfloor)\bigr) + F_{\text{prime}}(n) - F_{\text{prime}}(p_{k-1}) \\ &= \sum_{k \le i,\, p_{i}^{2} \le n} \sum_{c \ge 1,\, p_{i}^{c+1} \le n} \bigl(f(p_{i}^{c+1}) + f(p_{i}^{c}) F_{i+1}(\lfloor n / p_{i}^{c} \rfloor)\bigr) + F_{\text{prime}}(n) - F_{\text{prime}}(p_{k-1}) \end{align}

考虑计算Fk(n)F_{k}(n)
1.1.直接递推
2.2.从大到小枚举pp,当p2<np^{2}<n时转移增加值不为零,可后缀和优化
考虑计算Fprime(n)F_{prime}(n),发现只有1,2,...,⌊n⌋,⌊n⌊n⌋⌋,...,⌊n2⌋,n1,2,...,\lfloor\sqrt n\rfloor,\lfloor\frac{n}{\lfloor\sqrt n\rfloor}\rfloor,...,\lfloor\frac{n}{2}\rfloor,n这几个点有用
一般f(p)=∑aipcif(p)=\sum a_{i}p^{c_{i}},我们计算∑p≤mg(p),g(p)=ps\sum_{p\leq m}g(p),g(p)=p^{s}
Gk(n)G_{k}(n)表示埃筛第kk轮筛后剩下的gg的和
有递推公式Gk(n)=Gk−1(n)−[pk2≤n]g(pk)(Gk−1(⌊npk⌋)−Gk−1(pk−1))G_{k}(n)=G_{k-1}(n)-[p_{k}^{2}\leq n]g(p_{k})(G_{k-1}(\lfloor\frac{n}{p_{k}}\rfloor)-G_{k-1}({p_{k-1}}))
Gk−1(⌊npk⌋)−Gk−1(pk−1)G_{k-1}(\lfloor\frac{n}{p_{k}}\rfloor)-G_{k-1}({p_{k-1}})的结果是最小质因子大于pk−1p_{k-1}的数的次方和
然后就可以用GG合并得到FF了

类欧几里得算法#

f(a,b,c,n)=∑i=0n⌊ai+bc⌋f(a,b,c,n)=\sum_{i=0}^{n} \lfloor \frac{ai+b}{c} \rfloor
g(a,b,c,n)=∑i=0n⌊ai+bc⌋2g(a,b,c,n)=\sum_{i=0}^{n} \lfloor \frac{ai+b}{c} \rfloor ^{2}
h(a,b,c,n)=∑i=0ni⌊ai+bc⌋h(a,b,c,n)=\sum_{i=0}^{n} i\lfloor \frac{ai+b}{c} \rfloor
计算ff

f(a,b,c,n)=∑i=0n⌊ai+bc⌋=∑i=0n⌊(⌊a/c⌋⋅c+(a mod c))i+⌊b/c⌋⋅c+(b mod c)c⌋=∑i=0n⌊(a mod c)i+(b mod c)c⌋+⌊a/c⌋ i+⌊b/c⌋=n(n+1)2⌊a/c⌋+(n+1)⌊b/c⌋+f(a mod c, b mod c, c, n)\begin{align} f(a,b,c,n) &= \sum_{i=0}^{n} \left\lfloor \frac{ai+b}{c} \right\rfloor \\ &= \sum_{i=0}^{n} \left\lfloor \frac{(\lfloor a/c \rfloor \cdot c + (a \bmod c)) i + \lfloor b/c \rfloor \cdot c + (b \bmod c)}{c} \right\rfloor \\ &= \sum_{i=0}^{n} \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor + \lfloor a/c \rfloor \, i + \lfloor b/c \rfloor \\ &= \frac{n(n+1)}{2} \lfloor a/c \rfloor + (n+1)\lfloor b/c \rfloor + f(a \bmod c,\, b \bmod c,\, c,\, n) \end{align}

如果a<c,b<ca<c,b<c,m=⌊an+bc⌋m=\lfloor \frac{an+b}{c} \rfloor,⌊ai+bc⌋=⌈ai+b+1c⌉−1\lfloor \frac{ai+b}{c} \rfloor=\lceil \frac{ai+b+1}{c} \rceil-1

f(a,b,c,n)=∑i=0n⌊ai+bc⌋=∑i=0n∑j=0m−1[ j<⌊ai+bc⌋ ]=∑i=0n∑j=0m−1[ j<⌈ai+b+1c⌉−1 ]=∑i=0n∑j=0m−1[ j+1<⌈ai+b+1c⌉ ]=∑i=0n∑j=0m−1[ j+1<ai+b+1c ]=∑i=0n∑j=0m−1[ jc+c<ai+b+1 ]=∑j=0m−1∑i=0n[ i>cj+c−b−1a ]=∑j=0m−1∑i=0n[ i>⌊cj+c−b−1a⌋ ]=∑j=0m−1(n−⌊cj+c−b−1a⌋)=mn−f(c, c−b−1, a, m−1)\begin{align} f(a,b,c,n) &= \sum_{i=0}^{n} \left\lfloor \frac{ai+b}{c} \right\rfloor \\ &= \sum_{i=0}^{n} \sum_{j=0}^{m-1} [\, j < \left\lfloor \frac{ai+b}{c} \right\rfloor \,] \\ &= \sum_{i=0}^{n} \sum_{j=0}^{m-1} [\, j < \left\lceil \frac{ai+b+1}{c} \right\rceil - 1 \,] \\ &= \sum_{i=0}^{n} \sum_{j=0}^{m-1} [\, j+1 < \left\lceil \frac{ai+b+1}{c} \right\rceil \,] \\ &= \sum_{i=0}^{n} \sum_{j=0}^{m-1} [\, j+1 < \frac{ai+b+1}{c} \,] \\ &= \sum_{i=0}^{n} \sum_{j=0}^{m-1} [\, jc + c < ai + b + 1 \,] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} [\, i > \frac{cj + c - b - 1}{a} \,] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} [\, i > \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor \,] \\ &= \sum_{j=0}^{m-1} \left( n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor \right) \\ &= mn - f(c,\, c-b-1,\, a,\, m-1) \end{align}

计算g,hg,h

g(a,b,c,n)=∑i=0n⌊ai+bc⌋2=∑i=0n⌊(⌊a/c⌋⋅c+(a mod c))i+⌊b/c⌋⋅c+(b mod c)c⌋2=∑i=0n(⌊(a mod c)i+(b mod c)c⌋+⌊a/c⌋ i+⌊b/c⌋)2=∑i=0n⌊(a mod c)i+(b mod c)c⌋2+∑i=0n(⌊a/c⌋ i)2+∑i=0n⌊b/c⌋2+2⌊a/c⌋∑i=0ni⌊(a mod c)i+(b mod c)c⌋+2⌊b/c⌋∑i=0n⌊(a mod c)i+(b mod c)c⌋+2⌊a/c⌋⌊b/c⌋∑i=0ni=g(a mod c, b mod c, c, n)+n(n+1)(2n+1)6⌊a/c⌋2+(n+1)⌊b/c⌋2+2⌊a/c⌋ h(a mod c, b mod c, c, n)+2⌊b/c⌋ f(a mod c, b mod c, c, n)+n(n+1)⌊a/c⌋⌊b/c⌋\begin{align} g(a,b,c,n) &= \sum_{i=0}^{n} \left\lfloor \frac{ai+b}{c} \right\rfloor^{2} \\ &= \sum_{i=0}^{n} \left\lfloor \frac{(\lfloor a/c \rfloor \cdot c + (a \bmod c)) i + \lfloor b/c \rfloor \cdot c + (b \bmod c)}{c} \right\rfloor^{2} \\ &= \sum_{i=0}^{n} \left( \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor + \lfloor a/c \rfloor \, i + \lfloor b/c \rfloor \right)^{2} \\ &= \sum_{i=0}^{n} \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor^{2} + \sum_{i=0}^{n} (\lfloor a/c \rfloor \, i)^{2} + \sum_{i=0}^{n} \lfloor b/c \rfloor^{2} \\ &\quad + 2 \lfloor a/c \rfloor \sum_{i=0}^{n} i \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor + 2 \lfloor b/c \rfloor \sum_{i=0}^{n} \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor \\ &\quad + 2 \lfloor a/c \rfloor \lfloor b/c \rfloor \sum_{i=0}^{n} i \\ &= g(a \bmod c,\, b \bmod c,\, c,\, n) + \frac{n(n+1)(2n+1)}{6} \lfloor a/c \rfloor^{2} + (n+1)\lfloor b/c \rfloor^{2} \\ &\quad + 2 \lfloor a/c \rfloor \, h(a \bmod c,\, b \bmod c,\, c,\, n) + 2 \lfloor b/c \rfloor \, f(a \bmod c,\, b \bmod c,\, c,\, n) + n(n+1)\lfloor a/c \rfloor \lfloor b/c \rfloor \end{align}

如果a<c,b<c,m=⌊an+bc⌋a<c,b<c,m=\lfloor \frac{an+b}{c} \rfloor

g(a,b,c,n)=∑i=0n⌊ai+bc⌋2=∑i=0n∑j=0m−1(2j+1) [ j<⌊ai+bc⌋ ]=∑j=0m−1(2j+1)∑i=0n[ i>⌊cj+c−b−1a⌋ ]=∑j=0m−1(2j+1)(n−⌊cj+c−b−1a⌋)=m2n−2 h(c, c−b−1, a, m−1)−f(c, c−b−1, a, m−1)\begin{align} g(a,b,c,n) &= \sum_{i=0}^{n} \left\lfloor \frac{ai+b}{c} \right\rfloor^{2} \\ &= \sum_{i=0}^{n} \sum_{j=0}^{m-1} (2j+1)\,[\, j < \left\lfloor \frac{ai+b}{c} \right\rfloor \,] \\ &= \sum_{j=0}^{m-1} (2j+1) \sum_{i=0}^{n} \left[\, i > \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor \,\right] \\ &= \sum_{j=0}^{m-1} (2j+1)\left( n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor \right) \\ &= m^{2} n - 2\, h(c,\, c-b-1,\, a,\, m-1) - f(c,\, c-b-1,\, a,\, m-1) \end{align}h(a,b,c,n)=∑i=0n⌊ai+bc⌋ i=∑i=0n⌊(⌊a/c⌋⋅c+(a mod c)) i+⌊b/c⌋⋅c+(b mod c)c⌋i=∑i=0n⌊(a mod c)i+(b mod c)c⌋i+⌊a/c⌋ i2+⌊b/c⌋ i=h(a mod c, b mod c, c, n)+n(n+1)(2n+1)6⌊a/c⌋+n(n+1)2⌊b/c⌋\begin{align} h(a,b,c,n) &= \sum_{i=0}^{n} \left\lfloor \frac{ai+b}{c} \right\rfloor\, i \\ &= \sum_{i=0}^{n} \left\lfloor \frac{(\lfloor a/c \rfloor \cdot c + (a \bmod c))\, i + \lfloor b/c \rfloor \cdot c + (b \bmod c)} {c} \right\rfloor i \\ &= \sum_{i=0}^{n} \left\lfloor \frac{(a \bmod c)i + (b \bmod c)}{c} \right\rfloor i + \lfloor a/c \rfloor\, i^{2} + \lfloor b/c \rfloor\, i \\ &= h(a \bmod c,\, b \bmod c,\, c,\, n) + \frac{n(n+1)(2n+1)}{6}\lfloor a/c \rfloor + \frac{n(n+1)}{2}\lfloor b/c \rfloor \end{align}

如果a<ca<c,b<cb<c,m=⌊an+bc⌋m=\lfloor \frac{an+b}{c} \rfloor

h(a,b,c,n)=∑i=0n⌊ai+bc⌋ i=∑i=0ni∑j=0m−1[ j<⌊ai+bc⌋ ]=∑j=0m−1∑i=0ni[ i>⌊cj+c−b−1a⌋ ]=∑j=0m−1∑i=⌊cj+c−b−1a⌋+1ni=∑j=0m−1(n+⌊cj+c−b−1a⌋+1)(n−⌊cj+c−b−1a⌋)2=12∑j=0m−1((n+1)n−⌊cj+c−b−1a⌋−⌊cj+c−b−1a⌋2)=12(n+1)nm−12f(c, c−b−1, a, m−1)−12g(c, c−b−1, a, m−1)\begin{align} h(a,b,c,n) &= \sum_{i=0}^{n} \left\lfloor \frac{ai+b}{c} \right\rfloor\, i \\ &= \sum_{i=0}^{n} i \sum_{j=0}^{m-1} \left[\, j < \left\lfloor \frac{ai+b}{c} \right\rfloor \,\right] \\ &= \sum_{j=0}^{m-1} \sum_{i=0}^{n} i \left[\, i > \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor \,\right] \\ &= \sum_{j=0}^{m-1} \sum_{i=\left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor + 1}^{n} i \\ &= \sum_{j=0}^{m-1} \frac{\left(n + \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor + 1\right) \left(n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor\right)}{2} \\ &= \frac{1}{2} \sum_{j=0}^{m-1} \left( (n+1)n - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor - \left\lfloor \frac{cj + c - b - 1}{a} \right\rfloor^{2} \right) \\ &= \frac{1}{2}(n+1)nm - \frac{1}{2} f(c,\, c-b-1,\, a,\, m-1) - \frac{1}{2} g(c,\, c-b-1,\, a,\, m-1) \end{align}

最大公因数#

欧几里得算法#

gcd(a,b)=gcd(b,a mod b)gcd(a,b)=gcd(b,a\bmod b)

扩展欧几里得算法#

ax1+by1=gcd(a,b)ax_{1}+by_{1}=gcd(a,b)
bx2+(a mod b)y2=gcd(b,a mod b)bx_{2}+(a\bmod b)y_{2}=gcd(b,a\bmod b),又(a mod b)=a−b⌊ab⌋(a\bmod b)=a-b\lfloor \frac{a}{b}\rfloor,带入得
bx2+(a−b⌊ab⌋)y2=ay2+b(x2−⌊ab⌋y2)=ax1+by1bx_{2}+(a-b\lfloor \frac{a}{b}\rfloor)y_{2}=ay_{2}+b(x_{2}-\lfloor \frac{a}{b}\rfloor y_{2})=ax_{1}+by_{1}
有x1=y2x_{1}=y_{2},y1=x2−⌊ab⌋y2y_{1}=x_{2}-\lfloor \frac{a}{b}\rfloor y_{2}
最终会有b=0b=0,a=gcd=>x=1a=gcd=>x=1,y=0y=0

int exgcd(int a,int b,int& x,int& y){
if (!b)return x=1,y=0,a;
int d=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=t-(a/b)*y;
return d;
}

欧拉函数#

一些性质#

积性函数gcd(a,b)=1=>φ(ab)=φ(a)φ(b)gcd(a,b)=1=>\varphi(ab)=\varphi(a)\varphi(b)
n=∑d∣nφ(d)n=\sum_{d|n}\varphi(d)
φ(pk)=pk−pk−1\varphi(p^{k})=p^{k}-p^{k-1}
φ(n)=∏i=1sφ(piki)=∏i=1spiki−1(pi−1)=n∏i=1s(1−1pi)\varphi(n)=\prod_{i=1}^{s}\varphi(p_{i}^{k_{i}})=\prod_{i=1}^{s}p_{i}^{k_{i}-1}(p_{i}-1)=n\prod_{i=1}^{s}(1-\frac{1}{p_{i}})
φ(mn)φ(gcd(m,n))=φ(m)φ(n)gcd(m,n)\varphi(mn)\varphi(gcd(m,n))=\varphi(m)\varphi(n)gcd(m,n)

欧拉反演#

gcd⁡(a,b)=∑d∣gcd(a,b)φ(d)=∑d[d∣a][d∣b]φ(d)\gcd(a,b)=\sum_{d|gcd(a,b)}\varphi(d)=\sum_{d}[d|a][d|b]\varphi(d)
∑i=1ngcd(i,n)=∑d∑i=1n[d∣i][d∣n]φ(d)=∑d⌊nd⌋[d∣n]φ(d)=∑d∣n⌊nd⌋φ(d)\sum_{i=1}^{n}gcd(i,n)=\sum_{d}\sum_{i=1}^{n}[d|i][d|n]\varphi(d)=\sum_{d}\lfloor \frac{n}{d}\rfloor [d|n]\varphi(d)=\sum_{d|n}\lfloor \frac{n}{d}\rfloor \varphi(d)

欧拉定理#

gcd(a,m)=1gcd(a,m)=1,则aφ(m)≡1( mod m)a^{\varphi(m)} \equiv 1(\bmod m)

费马小定理#

ap−1≡1( mod p)a^{p-1}\equiv 1(\bmod p)

扩展欧拉定理#

ab≡{a b mod φ(m),gcd⁡(a,m)=1,a b,gcd⁡(a,m)≠1, b<φ(m),a (b mod φ(m))+φ(m),gcd⁡(a,m)≠1, b≥φ(m).\begin{align} a^{b} \equiv \begin{cases} a^{\, b \bmod \varphi(m)}, & \gcd(a,m)=1, \\[6pt] a^{\, b}, & \gcd(a,m)\neq 1,\ b < \varphi(m), \\[6pt] a^{\, (b \bmod \varphi(m)) + \varphi(m)}, & \gcd(a,m)\neq 1,\ b \ge \varphi(m). \end{cases} \end{align}

裴蜀定理#

存在x,yx,y使得ax+by=gcd(x,y)ax+by=gcd(x,y)

二元一次不定方程#

a1x+a2y=ba_{1}x+a_{2}y=b
(x,y)=(x1+ta2gcd(a1,a2),x2−ta1gcd(a1,a2))(x,y)=(x_{1}+t\frac{a_{2}}{gcd(a_{1},a_{2})},x_{2}-t\frac{a_{1}}{gcd(a_{1},a_{2})})

FrobeniusFrobenius 硬币问题#

有a1,a2,...,ana_{1},a_{2},...,a_{n}的面值的硬币若干种,且gcd(a1,a2,...,an)=1gcd(a_{1},a_{2},...,a_{n})=1,那么最大的不能被表示的面值为多少
n=2n=2时,答案为a1a2−a1−a2a_{1}a_{2}-a_{1}-a_{2}

Stern−BrocotStern-Brocot树与FareyFarey序列#

waitingwaiting

逆元#

线性求逆元#

p=⌊pi⌋i+(p mod i)p= \lfloor \frac{p}{i}\rfloor i +(p\bmod i)
0≡⌊pi⌋i+(p mod i)i+(p mod i) mod p0\equiv\lfloor \frac{p}{i}\rfloor i +(p\bmod i) i +(p\bmod i)\bmod p
i−1≡−⌊pi⌋(p mod i)−1mod  pi^{-1}\equiv -\lfloor \frac{p}{i}\rfloor(p\bmod i)^{-1} \mod p

中国剩余定理(CRT)(CRT)#

基本形式#

gcd(n1,n2,...,nk)=1gcd(n_{1},n_{2},...,n_{k})=1

{x≡a1(modn1),x≡a2(modn2),⋮x≡ak(modnk).\begin{cases} x \equiv a_{1} \pmod{n_{1}}, \\ x \equiv a_{2} \pmod{n_{2}}, \\ \vdots \\ x \equiv a_{k} \pmod{n_{k}}. \end{cases}

求xx
1.1.计算n=∏i=1knin=\prod_{i=1}^{k}n_{i}
2.mi=nni,mi−12.m_{i}=\frac{n}{n_{i}},m_{i}^{-1}为mi mod nim_{i}\bmod n_{i}的逆元
3.x=∑i=1kaimimi−1x=\sum_{i=1}^{k}a_{i}m_{i}m_{i}^{-1}

int a[N],r[N];
int crt(int k){
int n=1,ans=0;
for (int i=1;i<=k;i++)n*=r[i];
for (int i=1;i<=k;i++){
int m=n/r[i];
ans=(ans+a[i]*m*pow(m,r[i])%n)%n;
}
return (ans%n+n)%n;
}

GarnerGarner#

a<∏i=1kpia<\prod_{i=1}^{k}p_{i}且

{a≡a1(modp1),a≡a2(modp2),⋮a≡ak(modpk).\begin{cases} a \equiv a_{1} \pmod{p_{1}}, \\ a \equiv a_{2} \pmod{p_{2}}, \\ \vdots \\ a \equiv a_{k} \pmod{p_{k}}. \end{cases}

构造a=x1+x2p1+...xkp1...pk−1a=x_{1}+x_{2}p_{1}+...x_{k}p_{1}...p_{k-1},设piri,j≡1( mod pj)p_{i}r_{i,j}\equiv1(\bmod p_{j})
带入有
x1≡a1( mod p1)x_{1}\equiv a_{1}(\bmod p_{1})
x1+x2p1≡a2( mod p2)=>x_{1}+x_{2}p_{1}\equiv a_{2}(\bmod p_{2})=>,x2≡(a2−x1)r1,2( mod p2)x_{2}\equiv (a_{2}-x_{1})r_{1,2}(\bmod p_{2})
以此类推
xk≡(...((ak−x1)r1,k−x2)r2,k...)rk−1,k( mod pk)x_{k}\equiv (...((a_{k}-x_{1})r_{1,k}-x_{2})r_{2,k}...)r_{k-1,k}(\bmod p_{k})

for (int i = 0; i < k; ++i) {
x[i] = a[i];
for (int j = 0; j < i; ++j) {
x[i] = r[j][i] * (x[i] - x[j]);
x[i] = x[i] % p[i];
if (x[i] < 0) x[i] += p[i];
}
}

(粘的代码)

扩展#

x≡a1( mod m1)x\equiv a_{1}(\bmod m_{1}),x≡a2( mod m2)x\equiv a_{2}(\bmod m_{2}),m1,m2m_{1},m_{2}不一定互质
x=m1p+a1=m2q+a2=>m1p+m2q=(a2−a1)x=m_{1}p+a_{1}=m_{2}q+a_{2}=>m_{1}p+m_{2}q=(a_{2}-a_{1})
当gcd(m1,m2)∤(a2−a1)gcd(m_{1},m_{2})\nmid (a_{2}-a_{1})时,无解
否则可以求出一组(p,q)(p,q),使得x≡b( mod lcm(m1,m))x\equiv b(\bmod lcm(m_{1},m_{}))
多个方程两两合并

升幂引理#

νp(n)\nu_{p}(n),表示nn的标准分解中pp的次数,即pνp(n)∣∣np^{\nu_{p}(n)}||n

第一部分#

对所有素数pp和满足gcd(n,p)=1gcd(n,p)=1的整数nn,
1.1.若p∣x−yp | x-y,则:νp(xn−yn)=νp(x−y)\nu_{p}(x^{n}-y^{n})=\nu_{p}(x-y)
2.2.若p∣x+yp|x+y,则对奇数nn有:νp(xn+yn)=νp(x+y)\nu_{p}(x^{n}+y^{n})=\nu_{p}(x+y)
ProofProof:
p∣x−y<=>x≡y( mod p)p|x-y<=>x\equiv y(\bmod p)
∑i=0n−1xiyn−1−i≡nxn−1≢0( mod p)\sum_{i=0}^{n-1}x^{i}y^{n-1-i}\equiv nx^{n-1}\not\equiv 0(\bmod p)
xn−yn=(x−y)∑i=0n−1xiyn−1−ix^{n}-y^{n}=(x-y)\sum_{i=0}^{n-1}x^{i}y^{n-1-i}
则有νp(xn−yn)=νp(x−y)\nu_{p}(x^{n}-y^{n})=\nu_{p}(x-y)

p∣x+y<=>x≡−y( mod p)p|x+y<=>x\equiv -y(\bmod{p})
∑i=0n−1xi(−y)n−1−i≡nxn−1≢0( mod p)\sum_{i=0}^{n-1}x^{i}(-y)^{n-1-i}\equiv nx^{n-1}\not\equiv 0(\bmod p)
xn+yn=(x+y)∑i=0n−1xi(−y)n−1−ix^{n}+y^{n}=(x+y)\sum_{i=0}^{n-1}x^{i}(-y)^{n-1-i}
则有νp(xn+yn)=νp(x+y)\nu_{p}(x^{n}+y^{n})=\nu_{p}(x+y)

第二部分#

对所有奇素数pp,
1.1.若p∣x−yp | x-y,则:νp(xn−yn)=νp(x−y)+νp(n)\nu_{p}(x^{n}-y^{n})=\nu_{p}(x-y)+\nu_{p}(n)
2.2.若p∣x+yp|x+y,则对奇数nn有:νp(xn+yn)=νp(x+y)+νp(n)\nu_{p}(x^{n}+y^{n})=\nu_{p}(x+y)+\nu_{p}(n)
ProofProof
我们只需要证明p∣np\mid n的情况
n=pn=p时,我们只要证p2∤∑i=0n−1xiyn−1−ip^{2}\nmid \sum_{i=0}^{n-1}x^{i}y^{n-1-i}
设y=x+kpy=x+kp,(下面有点啰嗦)

∑i=0p−1xp−1−iyi=∑i=0p−1xp−1−i(x+kp)i=∑i=0p−1xp−1−i∑j=0i(ij)xi−j(kp)j=∑i=0p−1xp−1∑j=0i(ij)(kpx)j=xp−1∑j=0p−1∑i=jp−1(ij)(kpx)j=xp−1∑j=0p−1(kpx)j∑i=jp−1(ij)≡xp−1(p+kpx∑i=1p−1(i1))≡xp−1(p+kpx⋅(p−1)p2)≡xp−1p≢0(modp2)\begin{align} \sum_{i=0}^{p-1} x^{p-1-i} y^{i} &= \sum_{i=0}^{p-1} x^{p-1-i} (x + kp)^{i} \\ &= \sum_{i=0}^{p-1} x^{p-1-i} \sum_{j=0}^{i} \binom{i}{j} x^{i-j} (kp)^{j} \\ &= \sum_{i=0}^{p-1} x^{p-1} \sum_{j=0}^{i} \binom{i}{j} \left(\frac{kp}{x}\right)^{j} \\ &= x^{p-1} \sum_{j=0}^{p-1} \sum_{i=j}^{p-1} \binom{i}{j} \left(\frac{kp}{x}\right)^{j} \\ &= x^{p-1} \sum_{j=0}^{p-1} \left(\frac{kp}{x}\right)^{j} \sum_{i=j}^{p-1} \binom{i}{j} \\ &\equiv x^{p-1} \left( p + \frac{kp}{x} \sum_{i=1}^{p-1} \binom{i}{1} \right) \\ &\equiv x^{p-1} \left( p + \frac{kp}{x} \cdot \frac{(p-1)p}{2} \right) \\ &\equiv x^{p-1} p \\ &\not\equiv 0 \pmod{p^{2}} \end{align}

则有νp(xp−yp)=νp(x−y)+νp(p)\nu_{p}(x^{p}-y^{p})=\nu_{p}(x-y)+\nu_{p}(p)
下面用数学归纳法证明第一个式子
设n=pabn=p^{a}b,gcd(p,b)=1gcd(p,b)=1
νp((xpa)b−(ypa)b)=νp(xpa−ypa)\nu_{p}((x^{p^{a}})^{b}-(y^{p^{a}})^{b})=\nu_{p}(x^{p^{a}}-y^{p^{a}})
νp((xpa−1)p−(ypa−1)p)=νp(xpa−1−ypa−1)+νp(p)\nu_{p}((x^{p^{a-1}})^{p}-(y^{p^{a-1}})^{p})=\nu_{p}(x^{p^{a-1}}-y^{p^{a-1}})+\nu_{p}(p)
以此类推得
νp(xn−yn)=νp(x−y)+νp(n)\nu_{p}(x^{n}-y^{n})=\nu_{p}(x-y)+\nu_{p}(n)

与上面相似,我们只要证明p∣np|n的情况
n=pn=p时,我们只要证p2∤∑i=0n−1xi(−y)n−1−ip^{2}\nmid \sum_{i=0}^{n-1}x^{i}(-y)^{n-1-i}
设y=−x−kpy=-x-kp,与上面完全相同

∑i=0p−1xp−1−i(−y)i=∑i=0p−1xp−1−i(x+kp)i≡xp−1p≢0(modp2)\begin{align} \sum_{i=0}^{p-1} x^{p-1-i} (-y)^{i} &= \sum_{i=0}^{p-1} x^{p-1-i} (x + kp)^{i} \\ &\equiv x^{p-1} p \\ &\not\equiv 0 \pmod{p^{2}} \end{align}

则有νp(xp+yp)=νp(x+y)+νp(p)\nu_{p}(x^{p}+y^{p})=\nu_{p}(x+y)+\nu_{p}(p)
下面用数学归纳法证明第二个式子
设n=pabn=p^{a}b,gcd(p,b)=1gcd(p,b)=1
νp((xpa)b+(ypa)b)=νp(xpa+ypa)\nu_{p}((x^{p^{a}})^{b}+(y^{p^{a}})^{b})=\nu_{p}(x^{p^{a}}+y^{p^{a}})
νp((xpa−1)p+(ypa−1)p)=νp(xpa−1+ypa−1)+νp(p)\nu_{p}((x^{p^{a-1}})^{p}+(y^{p^{a-1}})^{p})=\nu_{p}(x^{p^{a-1}}+y^{p^{a-1}})+\nu_{p}(p)
以此类推得
νp(xn+yn)=νp(x+y)+νp(n)\nu_{p}(x^{n}+y^{n})=\nu_{p}(x+y)+\nu_{p}(n)

第三部分#

若p=2p=2且p∣x−yp\mid x-y
1.1.对奇数nn,νp(xn−yn)=νp(x−y)\nu_{p}(x^{n}-y^{n})=\nu_{p}(x-y)
2.2.对偶数nn,νp(xn−yn)=νp(x−y)+νp(x+y)+νp(n)−1\nu_{p}(x^{n}-y^{n})=\nu_{p}(x-y)+\nu_{p}(x+y)+\nu_{p}(n)-1
对上述x,y,nx,y,n,
若4∣x−y4\mid x-y,则:
ν2(x+y)=1\nu_{2}(x+y)=1
ν2(xn−yn)=ν2(x−y)+ν2(n)\nu_{2}(x^{n}-y^{n})=\nu_{2}(x-y)+\nu_{2}(n)
ProofProof
p=2p=2时,会把第二部分推导部分倒数第三行分母中的22约掉,不能用上面的方法
n=2ab,a=ν2(n),a∤bn=2^{a}b,a=\nu_{2}(n),a\nmid b
ν2(xn−yn)=ν2(x2a−y2a)=ν2((x−y)(x+y)∏i=1a−1(x2i+y2i))\nu_{2}(x^{n}-y^{n})=\nu_{2}(x^{2^{a}}-y^{2^{a}})=\nu_{2}((x-y)(x+y)\prod_{i=1}^{a-1}(x^{2^{i}}+y^{2^{i}}))
易知奇数的偶数次方模44余11,则x2i+y2i≡2( mod 4)x^{2^{i}}+y^{2^{i}}\equiv 2(\bmod 4)
则νp(xn−yn)=νp(x−y)+νp(x+y)+νp(n)−1\nu_{p}(x^{n}-y^{n})=\nu_{p}(x-y)+\nu_{p}(x+y)+\nu_{p}(n)-1

阶乘取模#

n!=pνp(n!)(n!)pn!=p^{\nu_{p}(n!)}(n!)_{p}

WilsonWilson定理#

对自然数n>1n>1,当且仅当nn时素数时,(n−1)!≡−1( mod n)(n-1)!\equiv -1(\bmod n)

定理#

对自然数m>1m>1,有∏1≤k<m,gcd(k,m)=1k≡±1( mod m)\prod_{1\leq k<m,gcd(k,m)=1}k\equiv \pm 1(\bmod m)
取−1-1,当且仅当模mm的原根存在

推论#

对素数pp和正整数α\alpha,有

∏1≤k<pαk≡{1,p=2, α≥3,−1,otherwise(modpα)\begin{align} \prod_{1 \le k < p^{\alpha}} k \equiv \begin{cases} 1, & p = 2,\ \alpha \ge 3, \\ -1, & \text{otherwise} \end{cases} \pmod{p^{\alpha}} \end{align}

阶乘余数#

计算(n!)p mod p(n!)_{p}\bmod p
(n!)p≡(−1)⌊np⌋⋅(n mod p)!⋅(⌊np⌋!)p( mod p)(n!)_{p}\equiv (-1)^{\lfloor \frac{n}{p}\rfloor}\cdot(n\bmod p)!\cdot(\lfloor \frac{n}{p}\rfloor!)_{p}(\bmod p)
(n!)p≡(±1)⌊np⌋⋅(∏1≤j≤(n mod pα),gcd(j,p)=1j)⋅(⌊np⌋!)p( mod pα)(n!)_{p}\equiv (\pm1)^{\lfloor \frac{n}{p}\rfloor}\cdot(\prod_{1\leq j\leq(n\bmod p^{\alpha}),gcd(j,p)=1}j)\cdot(\lfloor \frac{n}{p}\rfloor!)_{p}(\bmod p^{\alpha}),当p=2,α≥3p=2 , \alpha\geq3时取11,其余情况取−1-1
(n!)p≡(±1)∑j≥α⌊npj⌋∏j≥0F(⌊npj⌋ mod pa)(n!)_{p}\equiv (\pm1)^{\sum_{j\geq\alpha}\lfloor \frac{n}{p^{j}}\rfloor}\prod_{j\geq0}F(\lfloor \frac{n}{p^{j}}\rfloor\bmod p^{a}),F(m)=∏1≤k≤m,gcd(k,m)=1k mod pαF(m)=\prod_{1\leq k\leq m,gcd(k,m)=1}k\bmod p^{\alpha},当p=2,α≥3p=2 , \alpha\geq3时取11,其余情况取−1-1

LegendreLegendre公式#

νp(n!)=∑i=1∞⌊npi⌋=n−Sp(n)p−1\nu_{p}(n!)=\sum_{i=1}^{\infty}\lfloor \frac{n}{p^{i}}\rfloor =\frac{n-S_{p}(n)}{p-1},Sp(n)S_{p}(n)为pp进制下nn的各个位数之和

KummerKummer定理#

νp((mn))=Sp(n)+Sp(m−n)−Sp(m)p−1\nu_{p}(\binom{m}{n})=\frac{S_{p}(n)+S_{p}(m-n)-S_{p}(m)}{p-1}

LucasLucas定理#

对素数pp,有
(nk)≡(⌊np⌋⌊kp⌋)(n mod pk mod p)( mod p)\binom{n}{k}\equiv\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{k}{p}\rfloor}\binom{n\bmod p}{k\bmod p}(\bmod p)
ProofProof
(pn)≡[n=0∨n=p]( mod p)\binom{p}{n}\equiv[n=0\lor n=p](\bmod p)
f(x)=axn+bxmf(x)=ax^{n}+bx^{m}

(f(x))p=(axn+bxm)p=∑k=0p(pk)(axn)k(bxm)p−k=apxpn+bpxpm=a(xp)n+b(xp)m=f(xp)(modp)\begin{align} (f(x))^{p} &= (a x^{n} + b x^{m})^{p} \\ &= \sum_{k=0}^{p} \binom{p}{k} (a x^{n})^{k} (b x^{m})^{p-k} \\ &= a^{p} x^{pn} + b^{p} x^{pm} \\ &= a (x^{p})^{n} + b (x^{p})^{m} \\ &= f(x^{p}) \pmod{p} \end{align}

(1+x)n=(1+x)p⌊np⌋(1+x)n mod p≡(1+xp)⌊np⌋(1+x)n mod p( mod p)(1+x)^{n}=(1+x)^{p\lfloor\frac{n}{p}\rfloor}(1+x)^{n\bmod p}\equiv (1+x^{p})^{\lfloor\frac{n}{p}\rfloor}(1+x)^{n\bmod p}(\bmod p)
对比系数有,(nk)≡(⌊np⌋⌊kp⌋)(n mod pk mod p)( mod p)\binom{n}{k}\equiv\binom{\lfloor\frac{n}{p}\rfloor}{\lfloor\frac{k}{p}\rfloor}\binom{n\bmod p}{k\bmod p}(\bmod p)

exLucasexLucas算法#

素数幂模情况#

(nk)=pνp(n!)−νp(k!)−νp((n−k)!)(n!)p(k!)p((n−k)!)p\binom{n}{k}=p^{\nu_{p}(n!)-\nu_{p}(k!)-\nu_{p}((n-k)!)}\frac{(n!)_{p}}{(k!)_{p}((n-k)!)_{p}}

一般模数情况#

用中国剩余定理直接计算即可
m=p1α1p2α2...psαsm=p_{1}^{\alpha_{1}}p_{2}^{\alpha_{2}}...p_{s}^{\alpha_{s}}

{(nk)≡r1(modp1α1),(nk)≡r2(modp2α2),⋮(nk)≡rs(modpsαs).\begin{cases} \binom{n}{k} \equiv r_{1} \pmod{p_{1}^{\alpha_{1}}}, \\ \binom{n}{k} \equiv r_{2} \pmod{p_{2}^{\alpha_{2}}}, \\ \vdots \\ \binom{n}{k} \equiv r_{s} \pmod{p_{s}^{\alpha_{s}}}. \end{cases}

同余方程#

定义#

对整数mm和一元整系数多项式f(x)=∑i=0naixif(x)=\sum_{i=0}^{n}a_{i}x^{i},其中未知数x∈Zmx\in Z_{m},称形如f(x)≡0( mod m)f(x)\equiv 0(\bmod m)的方程为关于未知数xx的模mm的一元同余方程,若an≢0( mod m)a_{n}\not\equiv0(\bmod m),则上式称为nn次同余方程

素数幂模同余方程#

m=pe,p∈P,e∈Z>1m=p^{e},p\in P,e\in Z_{>1}
我们有f(x0)≡0( mod pe)f(x_{0})\equiv 0(\bmod p^{e}),则f(x0)≡0( mod pe−1)f(x_{0})\equiv 0(\bmod p^{e-1})

HenselHensel引理#

p∈P,e∈Z>1p\in P,e\in Z_{>1},f(x)=∑i=0naixi,(pe∤a),f′(x)=∑i=1niaixi−1f(x)=\sum_{i=0}^{n}a_{i}x^{i},(p^{e}\nmid a),f'(x)=\sum_{i=1}^{n}ia_{i}x^{i-1},且f(x0)≡0( mod pe−1)f(x_{0})\equiv 0(\bmod p^{e-1})
1.1.若f′(x0)≡0( mod p)f'(x_{0})\equiv0(\bmod p),则存在整数tt使得x=x0+pe−1tx=x_{0}+p^{e-1}t,是方程f(x)≡0( mod pe)f(x)\equiv 0(\bmod p^{e})的解
2.2.若f′(x0)≡0( mod p)f'(x_{0})\equiv0(\bmod p)且f′(x0)≡0( mod pe)f'(x_{0})\equiv0(\bmod p^{e}),则t=0,1,...,p−1t=0,1,...,p-1都可
3.3.若f′(x0)≡0( mod p)f'(x_{0})\equiv0(\bmod p)且f′(x0)≢0( mod pe)f'(x_{0})\not\equiv0(\bmod p^{e}),则不能由上式构造
ProofProof
假设xx是解,带入后有

f(x0+pe−1t)≡∑i=0nai(x0+pe−1t)i≡∑i=0nai∑j=0i(ij)x0 i−j(pe−1t)j≡∑j=0n(pe−1t)j∑i=jnai(ij)x0 i−j≡∑i=0nai(i0)x0 i+pe−1t∑i=1nai(i1)x0 i−1≡f(x0)+pe−1t f′(x0)≡0(modpe)\begin{align} f(x_{0} + p^{e-1} t) &\equiv \sum_{i=0}^{n} a_{i} (x_{0} + p^{e-1} t)^{i} \\ &\equiv \sum_{i=0}^{n} a_{i} \sum_{j=0}^{i} \binom{i}{j} x_{0}^{\, i-j} (p^{e-1} t)^{j} \\ &\equiv \sum_{j=0}^{n} (p^{e-1} t)^{j} \sum_{i=j}^{n} a_{i} \binom{i}{j} x_{0}^{\, i-j} \\ &\equiv \sum_{i=0}^{n} a_{i} \binom{i}{0} x_{0}^{\, i} + p^{e-1} t \sum_{i=1}^{n} a_{i} \binom{i}{1} x_{0}^{\, i-1} \\ &\equiv f(x_{0}) + p^{e-1} t\, f'(x_{0}) \\ &\equiv 0 \pmod{p^{e}} \end{align}

则tf′(x0)≡−f(x0)pe−1( mod p)tf'(x_{0})\equiv -\frac{f(x_{0})}{p^{e-1}}(\bmod p)
三种情况对应即可

注意到我们推理中只有最后一步用到f(x0)≡0( mod pe−1)f(x_{0})\equiv 0(\bmod p^{e-1}),那么我们可以对着最后的式子构造解

推论11#

1.f(s)≡0( mod p),f′(s)≢0( mod p)1.f(s)\equiv 0(\bmod p),f'(s)\not\equiv0(\bmod p),则存在xs∈Zpe,xs≡s( mod p),st.f(xs)≡0( mod pe)x_{s}\in Z_{p^{e}},x_{s}\equiv s(\bmod p),st.f(x_{s})\equiv 0(\bmod p^{e})
2.f(x)≡0( mod p),f′(x)≡0( mod p)2.f(x)\equiv 0(\bmod p),f'(x)\equiv 0(\bmod p)无公共解,则原方程的解数与f(x)≡0( mod p)f(x)\equiv 0(\bmod p)相同
proof?proof?

素数模同余方程#

e=1e=1,其余的同上

定理11#

若f(x)≡0( mod p)f(x)\equiv 0(\bmod p)有kk个不同的解x1,x2,...,xk(k≤n)x_{1},x_{2},...,x_{k}(k\leq n),则
f(x)≡g(x)∏i=1k(x−xi)( mod p)f(x)\equiv g(x)\prod_{i=1}^{k}(x-x_{i})(\bmod p),
degg=n−k,[xn−k]g(x)=andeg g=n-k,[x^{n-k}]g(x)=a_{n}

推论22#

(∀x∈Z),xp−1−1≡∏i=1p−1(x−i)( mod p)(\forall x\in Z),x_{p-1}-1\equiv \prod_{i=1}^{p-1}(x-i)(\bmod p)
(p−1)!≡−1( mod p)(p-1)!\equiv -1(\bmod p)

LagrangeLagrange定理#

f(x)≡0( mod p)f(x)\equiv 0(\bmod p)至多有nn个根

推论33#

若∑i=0nbixi≡0( mod p)\sum_{i=0}^{n}b_{i}x^{i}\equiv 0(\bmod p)的解数大于nn,则(∀i=0,1,...,n),p∣bi(\forall i=0,1,...,n),p\mid b_{i}

定理22#

若f(x)≡0( mod p)f(x)\equiv 0(\bmod p)的解数不为pp,则必定存在degr<pdeg r<p的整系数多项式r(x),st.r(x)≡0( mod p)r(x),st.r(x)\equiv 0(\bmod p)与f(x)≡0( mod p)f(x)\equiv 0(\bmod p)同解集
ProofProof
不妨设n≥pn\geq p
f(x)=g(x)(xp−x)+r(x),degr<pf(x)=g(x)(x^{p}-x)+r(x),deg r<p
运用费马小定理即可

定理33#

设n≤pn\leq p,则方程xn+∑i=0n−1aixi≡0( mod p)x_{n}+\sum_{i=0}^{n-1}a_{i}x_{i}\equiv 0(\bmod p)有nn个解当且仅当存在整系数多项式q(x),r(x),(degr<n),st.q(x),r(x),(deg r<n),st.
xp−x=f(x)q(x)+pr(x)x^{p}-x=f(x)q(x)+pr(x)
ProofProof
必要性:
xp−x=f(x)q(x)+r1(x)x^{p}-x=f(x)q(x)+r_{1}(x)
则r1r_{1}与ff同解,则知r1(x)=pr(x)r_{1}(x)=pr(x)
充分性:
f(x)q(x)≡0( mod p)f(x)q(x)\equiv 0(\bmod p)
设ff的解数为s,s≤ns,s\leq n
degf+degq≥p=>,s+p−n≥q,s≥ndeg f+deg q\geq p=>,s+p-n\geq q,s\geq n
则s=ns=n

定理44#

设n∣p−1,p∤a,n\mid p-1,p\nmid a,则方程xn≡a( mod p)x^{n}\equiv a(\bmod p)有解当且仅当ap−1n≡1( mod p)a^{\frac{p-1}{n}}\equiv 1(\bmod p),若有解,解数为nn
ProofProof
必要性:
方程有解x0x_{0},则ap−1n≡(x0n)p−1n≡1( mod p)a^{\frac{p-1}{n}}\equiv (x_{0}^{n})^{\frac{p-1}{n}} \equiv 1(\bmod p)
充分性:
ap−1n≡1( mod p)a^{\frac{p-1}{n}}\equiv 1(\bmod p),
xp−x=x(xp−1−1)=x((xn)p−1n−ap−1n+ap−1n−1)=(xn−a)P(x)+x(ap−1n−1)x^{p}-x=x(x^{p-1}-1)=x((x^{n})^{\frac{p-1}{n}}-a^{\frac{p-1}{n}}+a^{\frac{p-1}{n}}-1)=(x^{n}-a)P(x)+x(a^{\frac{p-1}{n}}-1)
由定理3知有nn个解

高次同余方程(组)的求解#

我们可以进行下面转化
同余方程组-同余方程
模合数-模素数幂-模素数(HenselHensel引理)
我们最后只需考虑
xn+∑i=0n−1aixi≡0( mod p),n<px^{n}+\sum_{i=0}^{n-1}a_{i}x^{i}\equiv 0(\bmod p),n<p
将xx代换为x−an−1nx-\frac{a_{n-1}}{n}可消去xn−1x^{n-1}项
只需考虑xn+∑i=0n−2aixi≡0( mod p),n<px^{n}+\sum_{i=0}^{n-2}a_{i}x^{i}\equiv 0(\bmod p),n<p
n=1n=1线性同余方程
n=2n=2二次剩余
可化为xn≡a( mod p)kx^{n}\equiv a(\bmod p)k次剩余

二次剩余#

定义#

gcd(a,p)=1gcd(a,p)=1,若存在整数xx使得x2≡a( mod p)x^{2}\equiv a(\bmod p),则称aa为模pp的二次剩余,否则称aa为模pp的二次非剩余

EulerEuler判别法#

对奇素数pp,和满足gcd(a,p)=1gcd(a,p)=1的aa,有

ap−12≡{1(modp),∃ x∈Z, a≡x2(modp),−1(modp),otherwise.\begin{align} a^{\frac{p-1}{2}} \equiv \begin{cases} 1 \pmod{p}, & \exists\, x \in \mathbb{Z},\ a \equiv x^{2} \pmod{p}, \\[6pt] -1 \pmod{p}, & \text{otherwise}. \end{cases} \end{align}

ProofProof
由费马小定理,ap−1≡1( mod p)a^{p-1}\equiv 1(\bmod p)
则(ap−12−1)(ap−12+1)≡0( mod p)(a^{\frac{p-1}{2}}-1)(a^{\frac{p-1}{2}}+1)\equiv 0(\bmod p)
则若gcd(a,p)=1gcd(a,p)=1,则ap−12≡±1( mod p)a^{\frac{p-1}{2}}\equiv \pm1(\bmod p)
又知xp−x=(xn−a)P(x)+x(ap−1n−1)x^{p}-x=(x^{n}-a)P(x)+x(a^{\frac{p-1}{n}}-1)
可证上述结论

对于奇素数pp,模pp意义下的二次剩余和二次非剩余都有p−12\frac{p-1}{2}个

LegendreLegendre符号#

对奇素数pp和整数aa,定义LegendreLegendre符号如下:

(ap)={0,p∣a,1,p∤a ∧ ∃ x∈Z, a≡x2(modp),−1,otherwise.\begin{align} \left( \frac{a}{p} \right) = \begin{cases} 0, & p \mid a, \\[6pt] 1, & p \nmid a \ \land\ \exists\, x \in \mathbb{Z},\ a \equiv x^{2} \pmod{p}, \\[6pt] -1, & \text{otherwise}. \end{cases} \end{align}

1.1.对任意整数aa,ap−12≡(ap)( mod p)a^{\frac{p-1}{2}}\equiv (\frac{a}{p})(\bmod p)
则(1p)=1,(−1p)=(−1)p−12(\frac{1}{p})=1,(\frac{-1}{p})=(-1)^{\frac{p-1}{2}}
2.a1≡a2( mod p)=>(a1p)=(a2p)2.a_{1}\equiv a_{2}(\bmod p)=>(\frac{a_{1}}{p})=(\frac{a_{2}}{p})
3.3.(完全积性)对任意整数a1,a2,(a1a2p)=(a1p)(a2p)a_{1},a_{2},(\frac{a_{1}a_{2}}{p})=(\frac{a_{1}}{p})(\frac{a_{2}}{p})
则对整数a,b,p∤b,(ab2p)=(ap)a,b,p\nmid b,(\frac{ab^{2}}{p})=(\frac{a}{p})
4.(2p)=(−1)p2−184.(\frac{2}{p})=(-1)^{\frac{p^{2}-1}{8}}

二次互反律#

设p,qp,q是两个不同的奇素数,则(pq)(qp)=(−1)p−12q−12(\frac{p}{q})(\frac{q}{p})=(-1)^{\frac{p-1}{2}\frac{q-1}{2}}
Proof?Proof?

模意义下的开平方#

p mod 4=3p\bmod 4=3时,ap+14 mod pa^{\frac{p+1}{4}}\bmod p为一个解

CipollaCipolla算法#

求解x2≡a( mod p)x^{2}\equiv a(\bmod p)
1.1.找到一个rr使得r2−ar^{2}-a为模pp非二次剩余(a mod p=0a\bmod p=0需要特判),期望两步找到,定义w2≡r2−a( mod p),wp−1≡−1( mod p)w^{2}\equiv r^{2}-a(\bmod p),w^{p-1}\equiv-1(\bmod p)
2.2.解为±(r+w)p+12\pm(r+w)^{\frac{p+1}{2}},(疑似需要复数类)

阶&原根#

阶#

对于a∈Z,m∈N+a\in Z,m\in N_{+}且gcd(a,m)=1gcd(a,m)=1,满足同余式an≡1( mod m)a^{n}\equiv 1(\bmod m)的最小正整数nn称为aa模mm的阶,记作δm(a)\delta_{m}(a)或ordm(a)ord_{m}(a)

幂的循环结构#

1.1.对于a∈Z,m∈N+a\in Z,m\in N_{+}且gcd(a,m)=1gcd(a,m)=1,幂次a0,a1,...,aδm(a)−1a^{0},a^{1},...,a^{\delta_{m}(a)-1}模mm两两不同余
2.2.对于a,n∈Z,m∈N+a,n\in Z,m\in N_{+}且gcd(a,m)=1gcd(a,m)=1,同余式an≡1( mod m)a^{n}\equiv 1(\bmod m)成立当且仅当δm(a)∣n\delta_{m}(a)\mid n
3.3.对于a,k∈Z,m∈N+a,k\in Z,m\in N_{+}且gcd(a,m)=1gcd(a,m)=1,有δm(ak)=δm(a)gcd(δm(a),k)\delta_{m}(a^{k})=\frac{\delta_{m}(a)}{gcd(\delta_{m}(a),k)}
4.4.对于a,b∈Z,m∈N+a,b\in Z,m\in N_{+}且gcd(a,m)=1,gcd(b,m)=1gcd(a,m)=1,gcd(b,m)=1,有 lcm(δm(a),δm(b))gcd(δm(a),δm(b))∣δm(ab)∣lcm(δm(a),δm(b))\frac{lcm(\delta_{m}(a),\delta_{m}(b))}{gcd(\delta_{m}(a),\delta_{m}(b))}\mid \delta_{m}(ab)\mid lcm(\delta_{m}(a),\delta_{m}(b))
gcd(δm(a),δm(b))=1<=>δm(ab)=δm(a)δm(b)gcd(\delta_{m}(a),\delta_{m}(b))=1<=>\delta_{m}(ab)=\delta_{m}(a)\delta_{m}(b) 5.5.对于a,b∈Z,m∈N+a,b\in Z,m\in N_{+}且gcd(a,m)=1,gcd(b,m)=1gcd(a,m)=1,gcd(b,m)=1,∃c∈Z,gcd(c,m)=1\exists c\in Z,gcd(c,m)=1使得δm(c)=lcm(δm(a),δm(b))\delta_{m}(c)=lcm(\delta_{m}(a),\delta_{m}(b))

原根#

对于m∈N+,m\in N_{+},如果存在g∈Zg\in Z且gcd(g,m)=1gcd(g,m)=1使得δm(g)=φ(m)\delta_{m}(g)=\varphi(m),则称gg为模mm的原根

原根判定定理#

对整数m≥3m\geq3和gcd(g,m)gcd(g,m),gg为模mm的原根,当且仅当对于φ(m)\varphi(m)的每个素因子pp有gφ(m)p≢1( mod m)g^{\frac{\varphi(m)}{p}}\not\equiv1(\bmod m)

原根个数#

模mm的原根个数为φ(φ(m))\varphi(\varphi(m))

原根存在定理#

模mm的原根存在,当且仅当m=1,2,4,pe,2pem=1,2,4,p^{e},2p^{e},其中pp为奇素数且e∈N+e \in N_{+}
Proof?Proof?

求原根的算法#

从小到大逐一枚举可能的数即可

CarmichaelCarmichael函数#

对于m∈N+m\in N_{+},定义λ(m)\lambda(m)为能使an≡1( mod m)a^{n}\equiv 1(\bmod m)对所有gcd(a,m)=1gcd(a,m)=1都成立的最小正整数
λ(m)=lcm{δm(a):gcd(a,m)=1}\lambda(m)=lcm\{\delta_{m}(a):gcd(a,m)=1\}
由幂的循环结构性质5知:λ(m)=max{δm(a):gcd(a,m)=1}\lambda(m)=max\{\delta_{m}(a):gcd(a,m)=1\}

递推公式#

引理#

gcd(m1,m2)=1,λ(m1m2)=lcm(λ(m1)λ(m2))gcd(m_{1},m_{2})=1,\lambda(m_{1}m_{2})=lcm(\lambda(m_1)\lambda(m_{2}))

引理#

对于m=2em=2^{e}且e∈N+e\in N_{+},有λ(2)=1,λ(4)=2,\lambda(2)=1,\lambda(4)=2,且对于e≥3e\geq3有λ(m)=2e−2\lambda(m)=2^{e-2}

引理#

对于m=pem=p^{e},pp为奇素数且e∈N+e\in N_{+},λ(m)=pe−1(p−1)\lambda(m)=p^{e-1}(p-1)

定理#

λ(m)={φ(m),m=1, 2, 4, pe, p odd, e∈N+,12φ(m),m=2e, e≥3,lcm⁡ ⁣(λ(p1e1), λ(p2e2), …, λ(pses)),m=p1e1p2e2⋯pses.\begin{align} \lambda(m) = \begin{cases} \varphi(m), & m = 1,\, 2,\, 4,\, p^{e},\ p \text{ odd},\ e \in \mathbb{N}_{+}, \\[6pt] \dfrac{1}{2}\varphi(m), & m = 2^{e},\ e \ge 3, \\[6pt] \operatorname{lcm}\!\bigl(\lambda(p_{1}^{e_{1}}),\, \lambda(p_{2}^{e_{2}}),\, \dots,\, \lambda(p_{s}^{e_{s}})\bigr), & m = p_{1}^{e_{1}} p_{2}^{e_{2}} \cdots p_{s}^{e_{s}}. \end{cases} \end{align}

CarmichaelCarmichael数#

对于合数nn,对所有满足gcd(a,n)=1gcd(a,n)=1的整数有an−1≡1( mod n)a^{n-1}\equiv1(\bmod n),则nn为 CarmichaelCarmichael数
KorseltKorselt判别法
合数nn为 CarmichaelCarmichael数当且仅当nn无平方因子且对于nn的任意质因子pp均有(p−1)∣(n−1)(p-1)\mid(n-1)

CarmichaelCarmichael数为奇数,没有平方因子,且至少有33个不同的素因子

离散对数#

定义#

取有原根的正整数mm,和其一原根gg,对满足gcd(a,m)=1gcd(a,m)=1,存在唯一整数0≤k<φ(m)0\leq k <\varphi(m),使得gk≡a( mod m)g^{k}\equiv a(\bmod m)
我们称这个kk为以gg为底,模mm的离散对数,记作k=indgak=ind_{g}a,
indg1=0,indgg=1ind_{g}1=0,ind_{g}g=1

性质#

设gg是模mm的原根,gcd(a,m)=gcd(b,m)=1gcd(a,m)=gcd(b,m)=1
1.indg(ab)≡indga+indgb( mod φ(m))1.ind_{g}(ab)\equiv ind_{g}a+ind_{g}b(\bmod \varphi(m))
2.g12.g_{1}也是模mm的原根,indga≡indg1⋅indgg1( mod φ(m))ind_{g}a\equiv ind_{g_{1}}\cdot ind_{g}g_{1}(\bmod \varphi(m))
3.a≡b( mod m)<=>indga=indgb3.a\equiv b(\bmod m)<=>ind_{g}a= ind_{g}b

BSGSBSGS大步小步算法#

在O(m)O(\sqrt m)的时间内求解ax≡b( mod m),gcd(a,m)=1a^{x}\equiv b(\bmod m),gcd(a,m)=1
x=A⌈m⌉−Bx=A\lceil \sqrt m\rceil -B,其中0≤A,B≤m0\leq A,B\leq\sqrt m,则aA⌈m⌉−B≡b( mod m)a^{A\lceil \sqrt m\rceil -B}\equiv b(\bmod m),也就是aA⌈m⌉≡baB( mod m)a^{A\lceil \sqrt m\rceil }\equiv ba^{B}(\bmod m) 然后预处理所有baBba^{B},在枚举aA⌈m⌉a^{A\lceil \sqrt m\rceil }即可
可用hash/maphash/map存储,mapmap会多一个loglog

扩展BSGSBSGS算法#

求解ax≡b( mod m)a^{x}\equiv b(\bmod m)
就是想办法把底数和模数变得互质
d1=gcd(a,m),d1∤bd_{1}=gcd(a,m),d_{1}\nmid b无解,否则得到ad1ax−1≡bd1( mod md1)\frac{a}{d_{1}}a^{x-1}\equiv \frac{b}{d_{1}}(\bmod \frac{m}{d_1})
d2=gcd(a,md1),d2∤bd1d_{2}=gcd(a,\frac{m}{d_{1}}),d_{2}\nmid \frac{b}{d_{1}}无解,否则得到a2d1d2ax−2≡bd1d2( mod md1d2)\frac{a^{2}}{d_{1}d_{2}}a^{x-2}\equiv \frac{b}{d_{1}d_{2}}(\bmod \frac{m}{d_{1}d_{2}})
......
D=∏i=1kdi,akDax−k≡bD( mod mD)D=\prod_{i=1}^{k}d_{i},\frac{a^{k}}{D}a^{x-k}\equiv \frac{b}{D}(\bmod \frac{m}{D})
转化成普通的BSGSBSGS问题

高次剩余&单位根#

高次剩余#

整数k≥2k\geq2,整数aa和正整数mm互素,若存在整数xx使得xk≡a( mod m)x^{k}\equiv a(\bmod m),则称aa为模mm的kk次剩余,xx为aa模mm的kk次方根;否则称aa为模mm的kk次非剩余

定理#

设整数k≥2k\geq2,整数aa和正整数mm互素,设模mm的原根存在,且gg是模mm的一个原根,记d=gcd(k,φ(m)),d′=φ(m)dd=gcd(k,\varphi(m)),d'=\frac{\varphi(m)}{d}
1.a1.a为模mm的kk次剩余,当且仅当ad′≡1( mod m)a^{d'}\equiv 1(\bmod m)
2.2.当aa为模mm的kk次剩余时,在同余意义下,aa模mm恰好有dd个互不相同的kk次方根,且它们具有形式x≡gy0+id′( mod φ(m)),0≤y0<d′,i=0,1,...,d−1x\equiv g^{y_{0+id'}}(\bmod \varphi(m)),0\leq y_{0}<d',i=0,1,...,d-1
3.3.模mm的kk次剩余类的个数为d′d',且它们全体就是{gdi mod m:0≤i<d′}\{g^{di}\bmod m:0\leq i<d'\}

ProofProof
gcd(a,m)=1,gcd(a,m)=1,则gcd(x,m)=1gcd(x,m)=1,又gg为模mm的原根,所以aa和xx与gg的某次幂同余,设x≡gy( mod m)x\equiv g^{y}(\bmod m),原方程等价于gky≡gindga( mod m)g^{ky}\equiv g^{ind_{g}a}(\bmod m),等价于ky≡indga( mod φ(m))ky\equiv ind_{g}a(\bmod \varphi(m)),该方程有解当且仅当d∣indga,d\mid ind_{g}a,且通解的形式为y=y0+id′y=y_{0}+id'
对于ad′≡1( mod m)a^{d'}\equiv 1(\bmod m),又由阶的性质33知δm(a)=δm(gindga)=φ(m)gcd(φ(m),indga)=φ(m)indga\delta_{m}(a)=\delta_{m}(g^{ind_{g}a})=\frac{\varphi(m)}{gcd(\varphi(m),ind_{g}a)}=\frac{\varphi(m)}{ind_{g}a},又方程有解当且仅当d∣indga,d\mid ind_{g}a,即φ(m)d′∣φ(m)δm(a)\frac{\varphi(m)}{d'}\mid\frac{\varphi(m)}{\delta_{m}(a)},也即δm(a)∣d′\delta_{m}(a)\mid d'由阶的性质22其等价于ad′≡1( mod m)a^{d'}\equiv 1(\bmod m)

定理#

设整数k≥2k\geq2,奇数aa和正整数m=2e,e≥2m=2^{e},e\geq2
当2∤k2\nmid k时
1.a1.a恒为模mm的kk次剩余
2.a2.a模mm的kk次方根有且仅有一个
3.3.模mm的kk次剩余类个数为2e−12^{e-1},且它们就是全体既约剩余类
当2∣k2\mid k时,d=gcd(k,2e−2),d′=2e−2dd=gcd(k,2^{e-2}),d'=\frac{2^{e-2}}{d}
1.a1.a为模mm的kk次剩余当且仅当a≡1( mod 4),ad′≡1( mod m)a\equiv 1(\bmod 4),a^{d'}\equiv 1(\bmod m)
2.2.当aa为模mm的kk次剩余时,同余意义下,aa模mm恰好有2d2d个互不相同的kk次方根,且他们具有相同的形式x≡±5y0+id′( mod 2e−1),0≤y0<d′,i=0,1,...,d−1x\equiv\pm5^{y_{0}+id'}(\bmod 2^{e-1}),0\leq y_{0}<d',i=0,1,...,d-1
3.3.模mm的kk次剩余类的个数为d′d',且他们的全体就是{5di mod m:0≤i<d′}\{5^{di}\bmod m:0\leq i<d'\}

ProofProof
gcd(a,m)=1,gcd(a,m)=1,则gcd(x,m)=1gcd(x,m)=1,因为a,xa,x为奇数,设a≡(−1)s5r( mod 2e),x≡(−1)y5z( mod 2e)a\equiv (-1)^{s}5^{r}(\bmod 2^{e}),x\equiv (-1)^{y}5^{z}(\bmod 2^{e}),则原方程等价于kz≡s( mod 2),ky≡r( mod 2e−2)kz\equiv s(\bmod 2),ky\equiv r (\bmod 2^{e-2})
当2∤k2\nmid k时总是有解
当2∣k2\mid k时,第一个方程有解当且仅当2∣s2\mid s,即a≡1( mod 4)a\equiv 1(\bmod 4),第二个条件有解当且仅当d=gcd(k,2)∣rd=gcd(k,2)\mid r同上知等价于ad′≡1( mod m)a^{d'}\equiv 1(\bmod m),根据两个方程,知解的形式为z≡0,1( mod 2),y=y0+id′( mod 2e−2),0≤y0<2e−2z\equiv0,1(\bmod 2),y=y_{0}+id'(\bmod 2^{e-2}),0\leq y_{0}<2^{e-2}

单位根#

定义#

对于模数 𝑚,元素 11 的 𝑘次方根称为模 𝑚的 𝑘次单位根.特别地,如果 𝑥是模 𝑚的一个 𝑘 次单位根,且它不是模 𝑚 的任何 𝑘′ <𝑘 次单位根,那么,也称 𝑥为 模 𝑚 的 𝑘 次本原单位根 原根gg是模mm的φ(m)\varphi(m)次本原单位根

性质#

模数mm,λ(m)\lambda(m)为它的CarmichaelCarmichael函数
1.1.所有与mm互素的整数aa都是模mm的δm(a)\delta_{m}(a)次本原单位根
2.2.元素aa是模mm的kk次单位根,且k′k'为kk的任意倍数,那么aa也是模mm的k′k'次单位根
3.3.元素aa是模mm的kk次(本原)单位根,那么元素ala^{l}是模mm的kgcd(k,l)\frac{k}{gcd(k,l)}次(本原)单位根
4.4.当k′k'遍历kk的因数,所有模mm的k′k'次本原单位根恰好构成模mm的kk次单位根的一个划分。对于gcd(l,k)=1,x∣−>xlgcd(l,k)=1,x|->x^{l}给出kk次单位根之间的双射,且保持上述划分不变
5.5.模mm的kk次本原单位根存在,当且仅当k∣λ(m)k\mid\lambda(m),,特别的,模mm的λ(m)\lambda(m)次本原单位根存在,称为模mm的λ−\lambda-原根
6.6.元素aa是模mm的kk次单位根,当且仅当ak≡1( mod m)a^{k}\equiv 1(\bmod m),且对任意素因子p∣k,akp≢1( mod m)p\mid k,a^{\frac{k}{p}}\not\equiv1(\bmod m)

ProofProof
只证明55
由CarmichaelCarmichael函数性质知,模mm的λ(m)\lambda(m)次本原单位根总是存在,设为aa,且δm(a)=λ(m)\delta_{m}(a)=\lambda(m),对于k∣λ(m)k\mid \lambda(m),设k′=λ(m)kk'=\frac{\lambda(m)}{k},总有δm(ak′)=λ(m)gcd(λ(m),k′)=λ(m)k′=k\delta_{m}(a^{k'})=\frac{\lambda(m)}{gcd(\lambda(m),k')}=\frac{\lambda(m)}{k'}=k,因此ak′a^{k'}是kk次本原单位根,又所有x,gcd(a,m)=1,x,gcd(a,m)=1,的阶都是λ(m)\lambda(m)的因子,故由性质55

定理#

设xx是aa模mm的一个kk次方根,当rr遍历模mm的全体kk次单位根时,xrxr遍历aa模mm的全体kk次方根

定理#

对于模数mm,设模mm的原根存在,且aa是模mm的kk次本原单位根,那么bb是kk次单位根,当且仅当它可以表示为aa的幂次

模意义下的开方#

改良Tonelli−ShanksTonelli-Shanks算法#

求解xk≡a( mod m),mx^{k}\equiv a(\bmod m),m为素数幂
特别的对于m=2em=2^{e}的情形,还要保证a≡1( mod 4)a\equiv 1(\bmod 4),将φ(m)\varphi(m)换成δm(5)=2e−2\delta_{m}(5)=2^{e-2}
设d=gcd(k,φ(m))d=gcd(k,\varphi(m)),当aa是模mm的kk次剩余时,aa总是模mm的φ(m)d\frac{\varphi(m)}{d}次单位根,对任意gcd(l,φ(m)d)=1,x−>xlgcd(l,\frac{\varphi(m)}{d})=1,x->x^{l}为单位根之间的双射,取l=(kd)−1( mod φ(m)d)l=(\frac{k}{d})^{-1}(\bmod \frac{\varphi(m)}{d}) 原方程两边同时取ll次幂xd≡xkl≡al≡b( mod m)x^{d}\equiv x^{kl}\equiv a^{l}\equiv b(\bmod m) 左边是因为ld−1≡k−1( mod φ(m))ld^{-1}\equiv k^{-1}(\bmod \varphi(m)),则d≡kl( mod φ(m))d\equiv kl(\bmod \varphi(m))
考虑d=∏p∈Pped=\prod_{p\in P}p^{e},从bb开始以次开pep^{e}即可
即求解xpe≡b( mod m)x^{p^{e}}\equiv b(\bmod m)
设φ(m)=psr,gcd(p,r)=1\varphi(m)=p^{s}r,gcd(p,r)=1,设q∈N+,qr≡−1( mod pe)q\in N_{+},qr\equiv-1(\bmod p^{e}),由于bb是rps−erp^{s-e}次单位根,那么bqrb^{qr}是ps−ep^{s-e}次单位根,设ζ\zeta是模mm的psp^{s}次本原单位根,那么ζpe\zeta^{p^{e}}是ps−ep^{s-e}次本原单位根,存在h,bqr≡ζhpe( mod m)h,b^{qr}\equiv\zeta^{hp^{e}}(\bmod m)可知x≡bqr+1peζ−h( mod m)x\equiv b^{\frac{qr+1}{p^{e}}}\zeta^{-h}(\bmod m) 为计算上式,需要找到摸 mm的一个pp次非剩余η\eta,则有ηrps−1≢1( mod m),ηrps≡1( mod m)\eta^{rp^{s-1}}\not\equiv1(\bmod m),\eta^{rp^{s}}\equiv1(\bmod m),ζ=ηr( mod m),ξ=ηrps−1( mod m)\zeta=\eta^{r}(\bmod m),\xi=\eta^{rp^{s-1}}(\bmod m)分别为psp^{s},pp次本原单位根
计算hh,取h<ps−eh<p^{s-e},考虑pp进制h=∑j=0s−e−1hjpjh=\sum_{j=0}^{s-e-1}h_{j}p^{j}当前jj为计算完时(bqrζ−pe(h0+...+hj−1pj−1))ps−e−j−1≡ζhjpe−1≡ξhj( mod m)(b^{qr}\zeta^{-p^{e}(h_{0}+...+h_{j-1}p^{j-1})})^{p^{s-e-j-1}}\equiv\zeta^{h_{j}p^{}e-1}\equiv\xi^{h_{j}}(\bmod m) 可用BSGSBSGS计算

一般情形#

m=pe,gcd(a,m)>1m=p^{e},gcd(a,m)>1
若a≡0( mod m),x=p⌈ek⌉l( mod pe),l=0,1,...,pe−⌊ek⌋−1a\equiv0(\bmod m),x=p^{\lceil\frac{e}{k}\rceil}l(\bmod p^{e}),l=0,1,...,p^{e-\lfloor\frac{e}{k}\rfloor-1}
若a≢0( mod m),a=psa′,gcd(a′,p)=1,x=pzx′,gcd(x′,p)=1a\not\equiv0(\bmod m),a=p^{s}a',gcd(a',p)=1,x=p^{z}x',gcd(x',p)=1则xk=pkz(x′)k≡psa′( mod pe)x^{k}=p^{kz}(x')^{k}\equiv p^{s}a'(\bmod p^e),该方程有解当且仅当kz=s,(x′)k≡a′( mod pe−s)kz=s,(x')^{k}\equiv a'(\bmod p^{e-s}),最终解为x≡psk(x′+lpe−s)( mod pe),l=0,1,...,ps−sk−1x\equiv p^{\frac{s}{k}}(x'+lp^{e-s})(\bmod p^{e}),l=0,1,...,p^{s-\frac{s}{k}}-1