打死没想到会在H老师处学懂数论

  • 同余,整除
  • 模运算
  • 埃式筛法
  • 欧拉筛法
  • 最大公约数和最小公倍数
  • 辗转相除法
  • 更相减损术
  • 裴蜀定理
  • 威尔逊定理
  • 费马定理
  • 同余等价类、剩余系、缩系
  • 欧拉函数
  • 欧拉定理
  • 扩展欧拉定理
  • 区间逆元
  • 扩展欧几里得
  • 中国剩余定理
  • 扩展中国剩余定理
  • 利用以上所有知识进行证明

数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网

同余,整除

整除的性质:

  • 传递性:若a∣b,b∣ca|b,b|cab,bc,则a∣ca|cac
  • a∣b,a∣ca|b,a|cab,ac等价于对于任意的整数x,yx,yx,y,有a∣(bx+cy)a|(bx+cy)a(bx+cy)
  • m≠0m≠0m=0,则a∣ba|bab等价于ma∣mbma|mbmamb
  • 设整数x,yx,yx,y满足ax+by=1,a∣n,b∣,nax+by=1,a|n,b|,nax+by=1,an,b,n,则(ab)∣n(ab)|n(ab)n
  • b=q∗d+cb=q*d+cb=qd+c,则d∣bd|bdb的充要条件是d∣cd|cdc

同余的性质:

  • 同加性:若a≡b(modp)a\equiv b(mod\ p)ab(mod p),则a+c≡b+c(modp)a+c\equiv b+c(mod\ p)a+cb+c(mod p)
  • 同减性:若a≡b(modp)a\equiv b(mod\ p)ab(mod p),则a−c≡b−c(modp)a-c\equiv b-c(mod\ p)acbc(mod p)
  • 同乘性:若a≡b(modp)a\equiv b(mod\ p)ab(mod p),则a×c≡b×c(modp)a\times c\equiv b\times c(mod\ p)a×cb×c(mod p)
  • 同除性:若a≡b(modp),c∣a,c∣b,(c,p)=1a\equiv b(mod\ p),c|a,c|b,(c,p)=1ab(mod p),ca,cb,(c,p)=1,则a/c≡b/c(modp)a/c\equiv b/c(mod\ p)a/cb/c(mod p)
  • 同幂性:若a≡b(modp),c>0a\equiv b(mod\ p),c>0ab(mod p),c>0,则ac≡bc(modp)a^c\equiv b^c(mod\ p)acbc(mod p)
  • a%p=x,a%q=x,(p,q)=1a\% p=x,a\% q=x,(p,q)=1a%p=x,a%q=x,(p,q)=1,则a%(p∗q)=xa\% (p*q)=xa%(pq)=x

数论常识:

  • 若2能整除a的最末位,则2∣a2|a2a
  • 若4能整除a的末两位,则4∣a4|a4a
  • 若8能整除a的末三位,则8∣a8|a8a
  • 若3能整除a的各位数字之和,则3∣a3|a3a
  • 若9能整除a的各位数字之和,则9∣a9|a9a
  • 若11能整除a的偶数位数字之和与奇数位数字之和的差,则11∣a11|a11a
  • 能被7,11,137,11,137,11,13整除的数的特征是:这个数的末三位与末三位以前的数字所组成数之差能被7,11,137,11,137,11,13整除

数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网

模运算

1.分配率

  • (a+b)%c=(a%c+b%c)%c(a+b)\% c=(a\% c+b\% c)\% c(a+b)%c=(a%c+b%c)%c
  • (a−b)%c=(a%c−b%c)%c(a-b)\% c=(a\% c-b\% c)\% c(ab)%c=(a%cb%c)%c
  • (a×b)%c=(a%c×b%c)%c(a\times b)\% c=(a\% c\times b\% c)\% c(a×b)%c=(a%c×b%c)%c
  • (ab)%c=(a%c)b%c(a^b)\% c=(a\% c)^b\% c(ab)%c=(a%c)b%c

2.放缩性

  • 如果a%b=c,d≠0a\% b=c,d≠0a%b=c,d=0,则有(a×d)%(b×d)=c×d(a\times d)\%(b\times d)=c\times d(a×d)%(b×d)=c×d
  • 如果a%b=c,d∣a,d∣ba\%b=c,d\bigg|a,d\bigg|ba%b=c,da,db,则(a/d)%(b/d)=(c/d)(a/d)\%(b/d)=(c/d)(a/d)%(b/d)=(c/d)

根据放缩性,则除法取余有式子 a/b%c=a%(b×c)/ba/b\%c=a\%(b\times c)/ba/b%c=a%(b×c)/b


埃式筛法

先把nnn以内的222的倍数(不包含222)全部删除,再把nnn以内的333的倍数(不包含333)全部删除,…

这样做下去,最后剩下的以内的数全为质数

这里的删除其实不是真的删除,只是打上一个删除标记而已

每个数都会被它的质因子打一次标记,而一个数的不同的质因子个数不超过logNlogNlogN

所以时间复杂度为O(NlogN)O(NlogN)O(NlogN)

void getprime( int n ) {for( int i = 2;i <= n;i ++ ) {if( flag[i] ) continue;prime[++ cnt] = i;for( int j = i;j <= n / i;j ++ )flag[j * i] = 1;}
}

欧拉筛法

在上述的埃氏筛法中,一个数可能被它的各个质因子都筛了一遍

而一个数的质因子种类数是不会超过logNlogNlogN的,所以时间复杂度为O(NlogN)O(NlogN)O(NlogN)

而欧式筛法保证每个数只被它的最小质因子筛一遍,这样,时间复杂度便降成了O(N)O(N)O(N)


有一个质数集合SSS,一开始,质数集合为空

同时有一个boolboolbool数组flagflagflag,表示删除标记

有两层循环:

外层循环从222开始枚举倍数,设当前枚举的量为aaa

如果aaa是质数,则将aaa加入质数集合

内层循环枚举质数集合中的元素,将数组中它们的aaa倍全部打上删除标记

显然,未打删除标记的数都是质数了(flagflagflag数组中下标小于222的元素是无效的,不用考虑)

但现在的时间复杂度仍然是O(NlogN)O(NlogN)O(NlogN)的,接下来,要用一个优化来完成O(N)O(N)O(N)的蜕变

设当前倍数为aaa,在内层循环中,设当前枚举到集合SSS中的第iii个质数pip_ipi

先将i∗pii*p_iipi打上标记

如发现iiipip_ipi的倍数时

此时后续的质数就无需再枚举了,可以提前退出内层循环

外层循环处理下一轮,即a++a++a++


为什么满足这种条件就可以提前breakbreakbreak呢?

设后续的质数为pi′p_i'pi,而pi′>pip_i'>p_ipi>pi

因为aaapip_ipi的倍数,那么a×pi′a\times p_i'a×pi也是pip_ipi的倍数

a×pi′=b×pia\times p_i'=b\times p_ia×pi=b×pi

∵pi′>pi∵p_i'>p_ipi>pi

∴b>a∴b>ab>a

我们希望每个数被它的最小质因子给删掉

所以a×pi′a\times p_i'a×pi应该被pip_ipi删掉(就要求a×pi′/pia\times p_i'/p_ia×pi/pi尽量大)

所以后续所有的质数就都留给倍数aaa增长到bbb再去处理了
数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网


void sieve( int n ) {for( int i = 2;i <= n;i ++ ) {if( ! flag[i] ) prime[++ cnt] = i;for( int j = 1;j <= cnt && i * prime[j] <= n;j ++ ) {flag[i * prime[j]] = 1;if( i % prime[j] == 0 ) break;}}
}

最大公约数和最小公倍数

gcd(a,b)×lcm(a,b)=a∗bgcd(a,b)\times lcm(a,b)=a*bgcd(a,b)×lcm(a,b)=ab

证明:
a,ba,ba,b进行质因子分解,设a,ba,ba,b的质因子集合并集为p1,p2,p3…pkp_1,p_2,p_3…p_kp1,p2,p3...pk
设a=p1i1p2i2…pkik,(0≤i1,0≤i2…0≤ik)设a=p_1^{i_1}p_2^{i_2}…p_k^{i_k},(0≤i_1,0\le i_2…0\le i_k)a=p1i1p2i2...pkik,(0i1,0i2...0ik)
设b=p1j1p2j2…pkjk,(0≤j1,0≤j2…0≤jk)设b=p_1^{j_1}p_2^{j_2}…p_k^{j_k},(0\le j_1,0\le j_2…0\le j_k)b=p1j1p2j2...pkjk,(0j1,0j2...0jk)
gcd(a,b)=p1min(i1,j1)p2min(i2,j2)…pkmin(ik,jk)gcd(a,b)=p_1^{min(i_1,j_1)}p_2^{min(i_2,j_2)}…p_k^{min(i_k,j_k)}gcd(a,b)=p1min(i1,j1)p2min(i2,j2)...pkmin(ik,jk)
lcm(a,b)=p1max(i1,j1)p2max(i2,j2)…pkmax(ik,jk)lcm(a,b)=p_1^{max(i_1,j_1)}p_2^{max(i_2,j_2)}…p_k^{max(i_k,j_k)}lcm(a,b)=p1max(i1,j1)p2max(i2,j2)...pkmax(ik,jk)
∵min(it,jt)+max(it,jt)=it+jt∵min(i_t,j_t)+max(i_t,j_t)=i_t+j_tmin(it,jt)+max(it,jt)=it+jt
∴gcd(a,b)+lcm(a,b)=p1i1+j1p2i2+j2…pkik+jk∴gcd(a,b)+lcm(a,b)=p_1^{i_1+j_1}p_2^{i_2+j_2}…p_k^{i_k+j_k}gcd(a,b)+lcm(a,b)=p1i1+j1p2i2+j2...pkik+jk


辗转相除法

gcd(a,b)≡gcd(b,a%b)gcd(a,b)\equiv gcd(b,a\%b)gcd(a,b)gcd(b,a%b)

证明:
d=gcd(a,b),a=x∗d,b=y∗dd=gcd(a,b),a=x*d,b=y*dd=gcd(a,b),a=xd,b=yd

根据模运算的放缩性有:a%b=(x∗d)%(y∗d)=(x%y)∗da\%b=(x*d)\%(y*d)=(x\%y)*da%b=(xd)%(yd)=(x%y)d

∵(x,y)=1∵(x,y)=1(x,y)=1

∴(y,x%y)=1∴(y,x\%y)=1(y,x%y)=1

int gcd( int x, int y ) {if( ! y ) return x;else return gcd( y, x % y );
}

时间复杂度O(log⁡)O(\log)O(log),最坏情况就是斐波拉契数列,相当于相邻两位一位一位移动(辗转相减)

辗转相减法:

gcd(a,b)=gcd(b,a−b),a>bgcd(a,b)=gcd(b,a-b),a>bgcd(a,b)=gcd(b,ab),a>b

证明:

a=Ad,b=Bd,(A,B)=1→(a,b)=da=Ad,b=Bd,(A,B)=1\rightarrow (a,b)=da=Ad,b=Bd,(A,B)=1(a,b)=d

a−b=(A−B)da-b=(A-B)dab=(AB)d

gcd(b,a−b)=gcd(Bd,(A−B)d)≠dgcd(b,a-b)=gcd\bigg(Bd,(A-B)d\bigg)≠dgcd(b,ab)=gcd(Bd,(AB)d)=d

说明gcd(B,A−B)>1gcd(B,A-B)>1gcd(B,AB)>1

gcd(B,A−B)=g,B=sg,A−B=tggcd(B,A-B)=g,B=sg,A-B=tggcd(B,AB)=g,B=sg,AB=tg

则一定有g∣Ag\bigg|AgA

(A,B)=1(A,B)=1(A,B)=1矛盾,所以gcd(B,A−B)=1gcd(B,A-B)=1gcd(B,AB)=1


更相减损术

若约分ab\frac{a}{b}ba
a,ba,ba,b均为偶,可先将a,ba,ba,b折半,即/2/2/2
否则,将a,ba,ba,b交替的减去对方
直到最后两数相等,此时的数乘上先前除掉的222即为原来a,ba,ba,b的最大公约数


裴蜀定理

如果a,ba,ba,b的最大公约数为ddd,且d∣cd\bigg|cdc,则存在整数x,yx,yx,y,使得ax+by=cax+by=cax+by=c

证明:

转化证明存在x,yx,yx,y使得ax+by=dax+by=dax+by=d

假设存在这样一对x,yx,yx,y,那么只需将其进行倍数放缩即可

∵(a,b)=d∵(a,b)=d(a,b)=d

∴∴a′=a/d,b′=b/da'=a/d,b'=b/da=a/d,b=b/d

则有a′x+b′y=1,(a′,b′)=1a'x+b'y=1,(a',b')=1ax+by=1,(a,b)=1

证明转化为 求一对x,yx,yx,y,使得a′x+b′y=1a'x+b'y=1ax+by=1,且满足(a′,b′)=1(a',b')=1(a,b)=1

即求证a′x%b′=1a'x\%b'=1ax%b=1(感性理解:若干倍的a′a'a减去若干倍的b′b'b等于111


引理一

如果a,ba,ba,b为正整数,且a,ba,ba,b互质,则不存在小于bbb的正整数kkk,使得0≡k∗a(modb)0\equiv k*a(mod\ b)0ka(mod b)

证明:

用反证法即可,假设存在这样的一个kkk使得该式成立

则需满足kkk或者aaa能整除bbb

∵(a,b)=1∵(a,b)=1(a,b)=1

∴a∴aa不可能整除bbb

∵0<k<b∵0<k<b0<k<b

∴k∴kk亦不可能整除bbb


推论

如果a,ba,ba,b为正整数,且a,ba,ba,b互质,则0,a,a∗2,a∗3…(b−1)∗a0,a,a*2,a*3…(b-1)*a0,a,a2,a3...(b1)a这些数取模bbb,余数互不相等

证明:

反证法

设存在0<i<j<b0<i<j<b0<i<j<b,使得a∗i≡a∗j(modb)a*i\equiv a*j(mod\ b)aiaj(mod b)

则有(i−j)∗a≡0(modb)(i-j)*a\equiv 0(mod\ b)(ij)a0(mod b)

同理引理一,i−j,ai-j,aij,a都不可能整除bbb,故与假设矛盾,不成立


引理二

如果(a,b)=1(a,b)=1(a,b)=1,则必存在一个整数kkk,满足k∗a%b=1k*a\% b=1ka%b=1

证明:
数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网
根据上面推论易知,这些数取模bbb的值只会在区间[0,b−1][0,b-1][0,b1]k=0k=0k=0时取模余数为000

而且各不相同,其中一定存在取模后的余数为111的值


根据引理二可知, 如果(a,b)=1(a,b)=1(a,b)=1,则必存在一个整数kkk,满足k∗a%b=1k*a\% b=1ka%b=1

k∗a−p∗b=1k*a-p*b=1kapb=1,裴蜀定理得证


威尔逊定理

(p−1)!≡−1(modp)(p-1)!\equiv -1(mod\ p)(p1)!1(mod p)当且仅当ppp为质数

证明:

先证充分性→p\rightarrow pp为质数,有(p−1)!≡p−1(modp)(p-1)!\equiv p-1(mod\ p)(p1)!p1(mod p)

假设0<i<p0<i<p0<i<p,根据上面的裴蜀定理,可得(i,p)=1(i,p)=1(i,p)=1,且必存在一个整数j(0<j<p)j(0<j<p)j(0<j<p)

使得i×j%p=1i\times j\%p=1i×j%p=1,即jjjiii的逆元,由此可见逆元具有唯一性,相互性

所以在[1,p−1][1,p-1][1,p1]中逆元是一对一对的

然而……也有可能存在iii的逆元是本身的,那么此时的iii就要满足以下条件

i2%p=1⇒(i+1)(i−1)%p=0i^2\%p=1\Rightarrow (i+1)(i-1)\%p=0i2%p=1(i+1)(i1)%p=0

∴i+1=0∴i+1=0i+1=0pppi−1=0i-1=0i1=0ppp

∵0<i<p∵0<i<p0<i<p

∴i+1=p,i−1=0∴i+1=p,i-1=0i+1=p,i1=0

i=p−1,1i=p-1,1i=p1,1

每一对逆元取模ppp都为111,需要证明的原式变成1∗p−1≡p−1(modp)1*p-1\equiv p-1(mod\ p)1p1p1(mod p)

显然成立,证毕
数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网


再证必要性→(p−1)!≡p−1(modp)\rightarrow (p-1)!\equiv p-1(mod\ p)(p1)!p1(mod p),当该式成立时,ppp一定为质数

反证法,即证明ppp不为质数时,该式不成立

ppp不为质数,则[2,p−1][2,p-1][2,p1]中一定有ppp的因子,设为iii,则i,p/ii,p/ii,p/i均为ppp的因子

  • i≠p/ii≠p/ii=p/i,则1×2×3×…×(p−1)1\times 2\times 3\times …\times (p-1)1×2×3×...×(p1)一定是ppp的倍数,取模ppp000

  • i=p/ii=p/ii=p/i,则1×2×3×…×(p−1)1\times 2\times 3\times …\times (p-1)1×2×3×...×(p1)一定是iii的倍数,模ppp必为iii的倍数

    又因为pppiii的倍数,且i>1i>1i>1,所以p−1p-1p1不可能是iii的倍数,所以(p−1)!≡−1(modp)(p-1)!\equiv-1(mod\ p)(p1)!1(mod p)


费马定理

如果ppp为质数,且a%p≠0a\%p≠0a%p=0,则有ap−1%p=1a^{p-1}\%p=1ap1%p=1

证明:
(a∗1)∗(a∗2)∗…∗(a∗(p−1))=ap−1∗(p−1)!(modp)(a*1)* (a* 2)* …*(a* (p-1))=a^{p-1}*(p-1)!\ \ (mod\ p)(a1)(a2)...(a(p1))=ap1(p1)!  (mod p)
∵(a,p)=1∵(a,p)=1(a,p)=1
∴{(a∗1)%p,(a∗2)%p,…,(a∗(p−1))%p}={1,p−1}∴\{(a* 1)\% p,(a*2)\% p,…,(a*(p-1))\%p\}=\{1,p-1\}{(a1)%p,(a2)%p,...,(a(p1))%p}={1,p1}
即取模后的值互不相等,且∈[1,p−1]∈[1,p-1][1,p1]
∴(a∗1)%p,(a∗2)%p,…,(a∗(p−1))%p=(p−1)!(modp)∴(a*1)\% p,(a*2)\% p,…,(a*(p-1))\%p=(p-1)!\ \ (mod\ p)(a1)%p,(a2)%p,...,(a(p1))%p=(p1)!  (mod p)
(p−1)!=ap−1(p−1)!(modp)(p-1)!=a^{p-1}(p-1)!\ \ (mod\ p)(p1)!=ap1(p1)!  (mod p)
∴ap−1=1(modp)∴a^{p-1}=1\ \ (mod\ p)ap1=1  (mod p)


同余等价类、剩余系、缩系

对于一个正整数ppp,所有非负整数模ppp的结果,只有ppp种可能,即{0,1,2,…,p−1}\{0,1,2,…,p-1\}{0,1,2,...,p1}
ppp剩余系指的是{0,1,2,…,p−1}\{0,1,2,…,p-1\}{0,1,2,...,p1},即小于ppp的所有非负整数,这个集合中包含了所有模ppp的余数
ppp的剩余系记为ZpZ_pZp

剩余系中,每一个元素代表的是一类数
比如在剩余系ZpZ_pZp

  • 000表示的是所有模ppp000的数,即{0,p,2p,3p…}\{0,p,2p,3p…\}{0,p,2p,3p...}
  • 111表示的是所有模ppp111的数,即{1,p+1,2p+1,3p+1…}\{1,p+1,2p+1,3p+1…\}{1,p+1,2p+1,3p+1...}

这些模ppp余数相同的数,称为同余等价类
可以发现,在模意义下,所有的非负整数可以被分为若干同余等价类

如果我们只考虑剩余系中与模数p互质的数,便得到一个子集,称为模p的缩系,记为Zp∗Z_p^*Zp
ppp666,则Zp∗={1,5}Z_p^*=\{1,5\}Zp={1,5}
缩系又称为简化剩余系

数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网


欧拉函数

欧拉函数即为缩系的大小

ϕ(1)=1\phi(1)=1ϕ(1)=1

  • 如果nnn为质数,则ϕ(n)=n−1\phi(n)=n-1ϕ(n)=n1
  • 如果n=apn=a^pn=ap,且aaa为质数,则ϕ(n)=ap−ap−1=ap(1−1a)\phi(n)=a^p-a^{p-1}=a^p(1-\frac{1}{a})ϕ(n)=apap1=ap(1a1)
  • n=a1p1a2p2…akpkn=a_1^{p_1}a_2^{p_2}…a_k^{p_k}n=a1p1a2p2...akpk,根据积性函数性质
    ϕ(n)=ϕ(a1p1)ϕ(a2p2)…ϕ(akpk)=a1p1(1−1a1)∗a2p2(1−1a2)…akpk(1−1ak)\phi(n)=\phi(a_1^{p_1})\phi(a_2^{p_2})…\phi(a_k^{p_k})=a_1^{p_1}(1-\frac{1}{a_1})*a_2^{p_2}(1-\frac{1}{a_2})…a_k^{p_k}(1-\frac{1}{a_k})ϕ(n)=ϕ(a1p1)ϕ(a2p2)...ϕ(akpk)=a1p1(1a11)a2p2(1a21)...akpk(1ak1)
    =n∗(1−1a1)∗(1−1a2)∗…∗(1−1ak)=n*(1-\frac{1}{a_1})*(1-\frac{1}{a_2})*…*(1-\frac{1}{a_k})=n(1a11)(1a21)...(1ak1)

∑d∣nϕ(d)=n\sum_{d\big|n}\phi(d)=ndnϕ(d)=n

考虑用分数形式证明

nnn个真分数:1n,2n,…,n−1n,nn\frac{1}{n},\frac{2}{n},…,\frac{n-1}{n},\frac{n}{n}n1,n2,...,nn1,nn

然后进行分数化简,按分母不同分类

分母一定是nnn的因数,且分母分子互质,并且真分数形式的分子小于分母

那么该类分数个数就是分母的ϕ\phiϕ,得证

小于nnn且与nnn互质的所有正整数之和为nϕ(n)2\frac{n\phi(n)}{2}2nϕ(n)

证明:
s={a1,a2,…,ak}s=\{a_1,a_2,…,a_k\}s={a1,a2,...,ak}是在模nnn意义下的缩系,根据缩系定义,个数就是ϕ(n)\phi(n)ϕ(n)

t={n−a1,n−a2,…,n−ak}t=\{n-a_1,n-a_2,…,n-a_k\}t={na1,na2,...,nak}也是模nnn意义下的缩系(详见辗转相除法的辗转相减)

两个集合相加,证毕
数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网

//求单个phi(n)
int getphi( int x ) {int ans = x;for( int i = 2;i * i <= x;i ++ ) {if( x % i == 0 ) {ans = ans / i * ( i - 1 );while( x % i == 0 ) x /= i;}}if( x > 1 ) ans = ans / x * ( x - 1 );return ans;
}
//求多个phi(n)
void getphi( int n ) {for( int i = 2;i <= n;i ++ ) {if( ! phi[i] ) {phi[i] = i - 1;for( int j = i << 1;j <= n;j += i ) {if( ! phi[j] ) phi[j] = j;phi[j] = phi[j] / i * ( i - 1 );}}}
}

欧拉定理

如果(a,p)=1(a,p)=1(a,p)=1,则aϕ(p)≡1(modp)a^{\phi(p)}\equiv1(mod\ p)aϕ(p)1(mod p)

证明:

ppp的简化剩余系为{p1,p2,p3,…,pk}\{p_1,p_2,p_3,…,p_k\}{p1,p2,p3,...,pk}

∵(a,p)=1∵(a,p)=1(a,p)=1

∴{a∗p1,a∗p2,…,a∗pk}∴\{a*p_1,a*p_2,…,a*p_k\}{ap1,ap2,...,apk}也构成了ppp的简化剩余系

(证明可参考裴蜀定理中的推论反证法

∴(a∗p1)∗(a∗p2)∗…∗(a∗pk)≡p1∗p2∗…∗pk(modp)∴(a*p_1)*(a*p_2)*…*(a*p_k)\equiv p_1*p_2*…*p_k(mod\ p)(ap1)(ap2)...(apk)p1p2...pk(mod p)

∴aϕ(p)≡1(modp)∴a^{\phi(p)}\equiv 1(mod\ p)aϕ(p)1(mod p)


扩展欧拉定理

a,ma,ma,m为正整数,当r>ϕ(m)r>\phi(m)r>ϕ(m)时,有ar≡ar%ϕ(m)+ϕ(m)a^r\equiv a^{r\%\phi(m)+\phi(m)}arar%ϕ(m)+ϕ(m)

证明:

分类讨论

  • .如果(a,m)=1(a,m)=1(a,m)=1,则显然成立

    因为由欧拉定理得aϕ(m)≡1(modm)a^{\phi(m)}\equiv1\pmod maϕ(m)1(modm)

  • (a,m)>1(a,m)>1(a,m)>1


引理一:

如果满足
{x≡y(modm)x≡y(modn)\begin{cases}x\equiv y\ (mod\ m)\\x\equiv y\ (mod\ n)\end{cases}{xy (mod m)xy (mod n)
则有
x≡y(modlcm(n,m))x\equiv y\ (mod\ \ lcm(n,m))xy (mod  lcm(n,m))

证明:
显然(x−y)(x-y)(xy)既是mmm的倍数,又是nnn的倍数,则其必然为lcm(n,m)lcm(n,m)lcm(n,m)的倍数


引理二:

如果ppp为质数,ϕ(pq)≥q\phi(p^q)\ge qϕ(pq)q

证明:

给两种证明方法

法一:

以每ppp个为一个周期划分

显然(p,p−1)=1,(p2,p2−1)=1,…,(pq,pq−1)=1(p,p-1)=1,(p^2,p^2-1)=1,…,(p^q,p^q-1)=1(p,p1)=1,(p2,p21)=1,...,(pq,pq1)=1

此时光考虑一部分就已经满足ϕ(pq)=q\phi(p^q)=qϕ(pq)=q,故引理显然成立


法二:

ϕ(pq)=pq−1∗(p−1)\phi(p^q)=p^{q-1}*(p-1)ϕ(pq)=pq1(p1)

根据数学归纳法

考虑q=1,ϕ(p)>=1q=1,\phi(p)>=1q=1,ϕ(p)>=1显然成立

q=kq=kq=k时成立,即pk−1∗(p−1)>=kp^{k-1}*(p-1)>=kpk1(p1)>=k

∵k>1∵k>1k>1

∴∴显然pk∗(p−1)>=k+1p^k*(p-1)>=k+1pk(p1)>=k+1

即当q=k+1q=k+1q=k+1时,也成立


接下来继续证明扩展欧拉定理

  • m=pkm=p^km=pk,即mmm为质数的幂时

    ∵(a,m)>1∵(a,m)>1(a,m)>1

    ∴p∣a∴p\bigg|apa

    由引理二可得ϕ(pk)≥k\phi(p^k)\ge kϕ(pk)k,即ϕ(m)≥k\phi(m)\ge kϕ(m)k

    ∴r>ϕ(m)≥k∴r> \phi(m)\ge kr>ϕ(m)k

    ∴ar=x∗pr=y∗pϕ(m)=z∗pk∴a^r=x*p^r=y*p^{\phi(m)}=z*p^kar=xpr=ypϕ(m)=zpk(从ppp的指数上抽一些下来使x→y→zx\rightarrow y\rightarrow zxyz

    m∣ar,m∣pϕ(m)m\bigg|a^r,m\bigg|p^{\phi(m)}mar,mpϕ(m)

    ∴ar≡ar%ϕ(m)+ϕ(m)≡0(modm)∴a^r\equiv a^{r\%\phi(m)+\phi(m)}\equiv 0(mod\ \ m)arar%ϕ(m)+ϕ(m)0(mod  m)

  • m=p1k1p2k2…pnknm=p_1^{k_1}p_2^{k_2}…p_{n}^{k_n}m=p1k1p2k2...pnkn

    m1=p1k1m_1=p_1^{k_1}m1=p1k1,则ar≡ar%ϕ(m1)+ϕ(m1)(modm1)a^r\equiv a^{r\%\phi(m_1)+\phi(m_1)}\ \ (mod\ \ m_1)arar%ϕ(m1)+ϕ(m1)  (mod  m1)

    m2=p2k2m_2=p_2^{k_2}m2=p2k2,则ar≡ar%ϕ(m2)+ϕ(m2)(modm2)a^r\equiv a^{r\%\phi(m_2)+\phi(m_2)}\ \ (mod\ \ m_2)arar%ϕ(m2)+ϕ(m2)  (mod  m2)

    …………......

    mn=pnknm_n=p_n^{k_n}mn=pnkn,则ar≡ar%ϕ(mn)+ϕ(mn)(modmn)a^r\equiv a^{r\%\phi(m_n)+\phi(m_n)}\ \ (mod\ \ m_n)arar%ϕ(mn)+ϕ(mn)  (mod  mn)

    m1,m2,…,mnm_1,m_2,…,m_nm1,m2,...,mn 不同的质数的幂,两两互质

    ϕ(m)=ϕ(m1)∗ϕ(m2)∗…∗ϕ(mn)\phi(m)=\phi(m_1)*\phi(m_2)*…*\phi(m_n)ϕ(m)=ϕ(m1)ϕ(m2)...ϕ(mn)

    又根据引理一,则得到:

    ar≡ar%ϕ(m)+ϕ(m)(modm)a^r\equiv a^{r\%\phi(m)+\phi(m)}\pmod marar%ϕ(m)+ϕ(m)(modm)

区间逆元

如果整数a,ba,ba,b满足a∗b%p=1a*b\%p=1ab%p=1,则称a,ba,ba,b在模ppp的意义下互为逆元
只有(a,p)=1(a,p)=1(a,p)=1,在模ppp的意义下aaa才有逆元,aaa的逆元记作a−1a^{-1}a1

证明:

(a,p)>1(a,p)>1(a,p)>1,则令d=gcd(a,p),d∣a,d∣pd=gcd(a,p),d|a,d|pd=gcd(a,p),da,dp

∴d∣a%p∴d|a\%pda%p(感性理解为:x倍ddd减去y倍ppp直到x<yx<yx<y,其差一定也为ddd的倍数)

∴a≡(x%y)d(modp)∴a\equiv (x\%y)d\ (mod\ \ p)a(x%y)d (mod  p)

∵d>1∵d>1d>1

∴(x%y)d≠1∴(x\%y)d≠1(x%y)d=1

逆元的性质:若(b,p)=1(b,p)=1(b,p)=1,则a/b%p=a∗b−1%pa/b\%p=a*b^{-1}\%pa/b%p=ab1%p

有一种求区间逆元的方式,时间复杂度为O(n)O(n)O(n)
设模数为m,f[n]m,f[n]m,f[n]表示nnn的逆元,其中[1,n)[1,n)[1,n)的逆元已经求出,则
f[n]=(−f[m%n]∗(m/n)%m+m)%mf[n]=(-f[m\%n]*(m/n)\%m+m)\%mf[n]=(f[m%n](m/n)%m+m)%m

证明:


公式一:

f[i]=−f[m−i]f[i]=-f[m-i]f[i]=f[mi]

证明:

f[i]∗i≡1(modm)f[i]*i\equiv1\ \ \ (mod\ m)f[i]i1   (mod m)

f[i]∗(m−i)≡−1(modm)f[i]*(m-i)\equiv-1\ \ \ (mod\ m)f[i](mi)1   (mod m)

f[m−i]∗(m−i)≡1(modm)f[m-i]*(m-i)\equiv1\ \ \ (mod\ m)f[mi](mi)1   (mod m)

f[i]=−f[m−i]f[i]=-f[m-i]f[i]=f[mi]


公式二:

f[i]=k∗f[k∗i]f[i]=k*f[k*i]f[i]=kf[ki]

证明:

f[i∗k]∗(i∗k)≡1(modm)f[i*k]*(i*k)\equiv 1\ \ \ (mod\ m)f[ik](ik)1   (mod m)

(f[i∗k]∗k)∗i≡1(modm)(f[i*k]*k)*i\equiv 1\ \ \ (mod\ m)(f[ik]k)i1   (mod m)

f[i]∗i≡1(modm)f[i]*i\equiv 1\ \ \ (mod\ m)f[i]i1   (mod m)

f[i∗k]∗k=f[i]f[i*k]*k=f[i]f[ik]k=f[i]


数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网f[n]=k∗f[k∗n]=m/n×f[m−m%n]f[n]=k*f[k*n]=m/n\times f[m-m\%n]f[n]=kf[kn]=m/n×f[mm%n]

f[m−m%n]=−f[m%n]f[m-m\%n]=-f[m\%n]f[mm%n]=f[m%n]

f[n]=m/n×(−f[m%n])f[n]=m/n\times (-f[m\% n])f[n]=m/n×(f[m%n])


inv[1] = 1;
for( int i = 2;i <= n;i ++ )inv[i] = ( mod - mod / i ) * inv[mod % i] % mod;

扩展欧几里得

扩展欧几里得是用来求不定方程:ax+by=cax+by=cax+by=c,且已知整数a,b,ca,b,ca,b,c
要求gcd(a,b)∣cgcd(a,b)|cgcd(a,b)c,才能保证有解

算法思想:递归求解

先求方程ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b),求出该方程的解,乘上系数c/gcd(a,b)c/gcd(a,b)c/gcd(a,b)即为原方程的解
ax+by=gcd(a,b)=gcd(b,a%b)=bx′+(a%b)y′=bx′+(a−a/b∗b)y′ax+by=gcd(a,b)=gcd(b,a\%b)=bx'+(a\%b)y'=bx'+(a-a/b*b)y'ax+by=gcd(a,b)=gcd(b,a%b)=bx+(a%b)y=bx+(aa/bb)y
a,ba,ba,b看做变量,移项合并同类项
ax+by=bx′+(a−a/b∗b)y′ax+by=bx'+(a-a/b*b)y'ax+by=bx+(aa/bb)y
ax+by−bx′−ay′+a/b∗by′=0ax+by-bx'-ay'+a/b*by'=0ax+bybxay+a/bby=0
xa−y′a+yb−x′b+a/b∗y′b=0xa-y'a+yb-x'b+a/b*y'b=0xaya+ybxb+a/byb=0
(x−y′)a+(y−x′+a/b∗y′)b=0(x-y')a+(y-x'+a/b*y')b=0(xy)a+(yx+a/by)b=0
∵a∗b≠0∵a*b≠0ab=0
∴x−y′=0,y−x′+a/b∗y′=0∴x-y'=0,y-x'+a/b*y'=0xy=0,yx+a/by=0
∴{x=y′y=x′−y′∗(a/b)∴\begin{cases}x=y'\\y=x'-y'*(a/b)\end{cases}{x=yy=xy(a/b)
只需要求出x′,y′x',y'x,y就可以求出x,yx,yx,y

而求x′,y′x',y'x,y可以继续递归下去

gcd(a,b)gcd(a,b)gcd(a,b)中的参数bbb最终会变为000,此时gcd(a,0)=agcd(a,0)=agcd(a,0)=a

于是有ax+by=gcd(a,0)=aax+by=gcd(a,0)=aax+by=gcd(a,0)=a,可以求出x=1,y=0x=1,y=0x=1,y=0

这是最底层的x,yx,yx,y,然后一层层返回,就可以求出最原始的x,yx,yx,y


注意,exgcdexgcdexgcd求出来的x,yx,yx,y满足的方程组是ax+bx=gcd(a,b)ax+bx=gcd(a,b)ax+bx=gcd(a,b)

将这一对x,yx,yx,y乘上cgcd(a,b)\frac{c}{gcd(a,b)}gcd(a,b)c,才是原方程的一组解

而且,这一组解只是一组特解,并不一定是最小的,可以通过通解公式去找到最小解xxx
数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网

ax+by=cax+by=cax+by=c
a(x−k)+b(y+akb)=ca(x-k)+b(y+\frac{ak}{b})=ca(xk)+b(y+bak)=c
因为aaa缩小若干倍,为了保证方程的正确性,bbb就应该放大若干倍,所以需满足b∣akb\bigg|akbak
∴bgcd(a,b)∣agcd(a,b)k∴\frac{b}{gcd(a,b)}\bigg|\frac{a}{gcd(a,b)}kgcd(a,b)bgcd(a,b)ak
∵(bgcd(a,b),agcd(a,b))=1∵(\frac{b}{gcd(a,b)},\frac{a}{gcd(a,b)})=1(gcd(a,b)b,gcd(a,b)a)=1
∴bgcd(a,b)∣k∴\frac{b}{gcd(a,b)}|kgcd(a,b)bk
所以原方程的aaa可以无限缩小bgcd(a,b)\frac{b}{gcd(a,b)}gcd(a,b)b倍,直到a<bgcd(a,b)a<\frac{b}{gcd(a,b)}a<gcd(a,b)b

同理,通解也可以被表示出来X=x+t×bgcd(a,b),Y=y−t×agcd(a,b)X=x+t\times \frac{b}{gcd(a,b)},Y=y-t\times \frac{a}{gcd(a,b)}X=x+t×gcd(a,b)b,Y=yt×gcd(a,b)a

void exgcd( int a, int b, int &d, int &x, int &y ) {if( ! b ) d = a, x = 1, y = 0;else {exgcd( b, a % b, d, y, x );y -= x * ( a / b );}
}
//求x的最小解
x = ( x * ( c / d ) % ( b / d ) + ( b / d ) ) % ( b / d )

中国剩余定理

求一个模线性方程组xxx
{x≡a1(modr1)x≡a2(modr2)…x≡ak(modrk)\begin{cases}x\equiv a_1\ \ (mod\ \ r_1)\\x\equiv a_2\ \ (mod\ \ r_2)\\…\\x\equiv a_k\ \ (mod\ \ r_k)\end{cases}xa1  (mod  r1)xa2  (mod  r2)...xak  (mod  rk)
其中r1,r2,…,rkr_1,r_2,…,r_kr1,r2,...,rk互质

对于rir_iri,设Ai=∏j≠irjA_i=\prod_{j≠i}r_jAi=j=irj

∵(r1,r2,…,rk)=1∵(r_1,r_2,…,r_k)=1(r1,r2,...,rk)=1

∴(Ai,ri)=1∴(A_i,r_i)=1(Ai,ri)=1

则一定存在一个整数cic_ici满足ci∗Ai%ri=1c_i*A_i\% r_i=1ciAi%ri=1

xi=ai∗ci∗Aix_i=a_i*c_i*A_ixi=aiciAi,则xi%ri=aix_i\%r_i=a_ixi%ri=ai

因为AiA_iAi是除了rir_iri以外的其他rrr值的最小公倍数

所以,xi%rj=0(j≠i)x_i\%r_j=0(j≠i)xi%rj=0(j=i),即xix_ixi模其他的rrr余数都为000,只有模rir_iri的时候,余数为aia_iai

换言之,把xix_ixi加到满足其他方程j(j≠i)j(j≠i)j(j=i)的解xjx_jxj上,(xi+xj)(x_i+x_j)(xi+xj)也一样满足方程jjj

同理,如果xjx_jxj也是这么求出来的,则(xi+xj)(x_i+x_j)(xi+xj)也满足方程iii

那么,我们对于每一个方程,都按照这个方法求出来该方程的解

把这些解累加起来,发现,这个和仍然满足每一个方程

x=∑i=1kai∗ci∗Ai%rix=\sum_{i=1}^ka_i*c_i*A_i\%r_ix=i=1kaiciAi%ri

对于xxx,加上所有的rrr值的最小公倍数,它仍然满足所有方程

所以,只要存在xxx,则意味着有无穷多组解

通解为:x=∑i=1k(ai∗ci∗Ai%ri)+p∗∏i=1kri,p∈Zx=\sum_{i=1}^k(a_i*c_i*A_i\%r_i)+p*\prod_{i=1}^kr_i,p∈Zx=i=1k(aiciAi%ri)+pi=1kri,pZ


扩展中国剩余定理

求一个模线性方程组xxx
{x≡a1(modr1)x≡a2(modr2)…x≡ak(modrk)\begin{cases}x\equiv a_1\ \ (mod\ \ r_1)\\x\equiv a_2\ \ (mod\ \ r_2)\\…\\x\equiv a_k\ \ (mod\ \ r_k)\end{cases}xa1  (mod  r1)xa2  (mod  r2)...xak  (mod  rk)
其中r1,r2,…,rkr_1,r_2,…,r_kr1,r2,...,rk不一定互质

首先,取前两个方程x=k∗r1+a1=p∗r2+a2x=k*r_1+a_1=p*r_2+a_2x=kr1+a1=pr2+a2k∗r1−p∗r2=a2−a1k*r_1-p*r_2=a_2-a_1kr1pr2=a2a1

这种形如ax+by=cax+by=cax+by=c的不定方程,可以用扩展欧几里得计算

gcd(r1,r2)gcd(r_1,r_2)gcd(r1,r2)不能整除a2−a1a_2-a_1a2a1时,方程组无解

否则,根据exgcdexgcdexgcd,求出k0k_0k0,满足k0∗r1−p∗r2=a2−a1k_0*r_1-p*r_2=a_2-a_1k0r1pr2=a2a1

kkk的通解为:
k=k0+b∗(r2/gcd(r1,r2))k=k_0+b*(r_2/gcd(r_1,r_2))k=k0+b(r2/gcd(r1,r2))
数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网

带入到方程组x=k∗r1+a1x=k*r_1+a_1x=kr1+a1中,则有x=(k0+b∗(r2/gcd(r1,r2)))∗r1+a1=k0∗r1+b∗lcm(r1,r2)+a1,b∈Zx=(k_0+b*(r_2/gcd(r_1,r_2)))*r_1+a_1=k_0*r_1+b*lcm(r_1,r_2)+a_1,b∈Zx=(k0+b(r2/gcd(r1,r2)))r1+a1=k0r1+blcm(r1,r2)+a1,bZ
x≡a1(modlcm(r1,r2))x\equiv a_1\ \ (mod\ \ lcm(r_1,r_2))xa1  (mod  lcm(r1,r2))
这个方程相当于合并了原来的两个方程,而形式上又和原来的方程一致

继续采用这个方法,不断地合并方程组中的两个方程

直到最后合并为一个方程,则可以得到xxx的通解

注意在这个过程中,要注意求出的k0k_0k0k∗r1−p∗r2=(a2−a1)k*r_1-p*r_2=(a_2-a_1)kr1pr2=(a2a1)的解

而不是k∗r1−p∗r2=gcd(r1,r2)k*r_1-p*r_2=gcd(r_1,r_2)kr1pr2=gcd(r1,r2)的解,前者是后者的倍数

//扩展中国剩余定理,求最小整数解x的模板代码
#include <cstdio>
#define MAXK 10000005
#define int long long
int mod[MAXK], r[MAXK];void exgcd( int a, int b, int &d, int &x, int &y ) {if( ! b ) d = a, x = 1, y = 0;else {exgcd( b, a % b, d, y, x );y -= x * ( a / b );}
}int Fabs( int x ) {return ( x < 0 ) ? -x : x;
}signed main() {int m;while( ~ scanf( "%lld", &m ) ) {for( int i = 1;i <= m;i ++ )scanf( "%lld %lld", &mod[i], &r[i] );int noans = 0, d, x, y;for( int i = 1;i < m;i ++ ) {exgcd( mod[i], mod[i + 1], d, x, y );if( Fabs( r[i + 1] - r[i] ) % d ) {noans = 1;break;}x = ( x * ( ( r[i + 1] - r[i] ) / d ) % ( mod[i + 1] / d ) + ( mod[i + 1] / d ) ) % ( mod[i + 1] / d );int lcm = mod[i] / d * mod[i + 1];mod[i + 1] = lcm, r[i + 1] = ( x * mod[i] + r[i] ) % lcm;}if( noans ) printf( "-1\n" );else printf( "%lld\n", r[m] );
//r[m]可能等于0,所以根据题目要求,若要最小正整数,则为mod[m]}return 0;
}

终于写完了!!!!!!!!!!!!!!!!!!!!!
数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法-编程知识网

利用以上所有知识进行证明

ppp是质数(p>3p>3p>3),则2p+12p+12p+14p+24p+24p+2至多有一个数是质数

抛开333的倍数(肯定是合数),任何整数都可以被改写成3k±13k±13k±1的形式

  • p=3k+1p=3k+1p=3k+1
    2p+1=6k+3=3(k+1)2p+1=6k+3=3(k+1)2p+1=6k+3=3(k+1),合数
    4p+2=12k+6=6(2k+1)4p+2=12k+6=6(2k+1)4p+2=12k+6=6(2k+1),合数
  • p=3k−1p=3k-1p=3k1
    2p+1=6k−12p+1=6k-12p+1=6k1,未知
    4p+2=12k−2=2(6k−1)4p+2=12k-2=2(6k-1)4p+2=12k2=2(6k1),合数

最多就是那个未知情况为质数,得证

gcd(f(n),f(m))=f(gcd(n,m))gcd(f(n),f(m))=f(gcd(n,m))gcd(f(n),f(m))=f(gcd(n,m))
f:f:f: 斐波拉契数列

gcd⁡(an−1,am−1)=agcd(n,m)−1\gcd(a^n-1,a^m-1)=a^{gcd(n,m)}-1gcd(an1,am1)=agcd(n,m)1