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

打死没想到会在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AT4437-[AGC028C]Min Cost Cycle【结论,堆】

正题 题目链接:https://www.luogu.com.cn/problem/AT4437 题目大意 有nnn个点的一张有向完全图&#xff0c;每个点有两个点权a,ba,ba,b。连接x,yx,yx,y两个点的边权为min{ax,by}min\{a_x,b_y\}min{ax​,by​}&#xff0c;求一条权值和最小的哈密顿回路。 1≤n≤105,1≤a,b≤1…

某银行大型管理系统端到端持续集成和交付实践

背景传统的银行IT系统研发流程从需求提出到产品交付往往具有较长的研发周期&#xff0c;纵观银行当下面临的市场环境&#xff0c;个人信贷消费升级&#xff0c;资管需求旺盛&#xff0c;普惠金融成为国家战略&#xff0c;来自银行同业和互联网金融的压力扑面而来&#xff0c;谁…

排列组合十一个性质公式及证明,错排数公式及证明

文章目录排列数组合数求组合数常用公式定义式递推式杨辉三角组合数常用性质及证明性质一性质二性质三性质四(二项式定理)性质五性质六性质七性质八性质九性质十性质十一错排数排列数 从nnn个物品中不放回地依次选mmm个物品&#xff0c;考虑顺序&#xff0c;有多少种方案&#…

引入用于 Azure IoT Edge 的 Visual Studio 工具

物联网开发人员&#xff1a;工具和经验引入用于 Azure IoT Edge 的 Visual Studio 工具今天&#xff0c;我们很高兴地发布用于 Visual Studio 2017 的 Azure IoT Edge 工具的预览版。Azure IoT Edge 是一个全托管服务&#xff0c;通过直接在跨平台物联网设备上部署并运行人工智…

P4878 [USACO05DEC]Layout G

P4878 [USACO05DEC]Layout G 题意&#xff1a; 题解&#xff1a; 这个题其实是差分约束的裸题&#xff0c;但是有几个坑要注意 1.题目说了&#xff0c;奶牛按照编号1…N排列&#xff0c;对于ML个输入&#xff0c;A< B ,所以关系是B - A < 10,而不是A - B <10,我一开…

【学习笔记】原根 / BSGS / 扩展BSGS证明及模板

文章目录原根BSGS大步小步算法扩展BSGS原根 如果两个整数a,ba,ba,b互质&#xff0c;则有aϕ(b)%b1a^{\phi(b)}\%b1aϕ(b)%b1 定义模bbb意义下的aaa的阶为使ad%b1a^d\%b1ad%b1的最小正整数ddd 显然&#xff0c;模bbb的阶d∣ϕ(b)d|\phi(b)d∣ϕ(b) 如果模bbb意义下aaa的阶为…

.Net Core分布式部署中的DataProtection密钥安全性

在.NetCore中默认使用DataProtection来保护数据&#xff0c;例如Cooike等。一般情况下DataProtection生成的密钥会被加密后存储&#xff0c;例如默认的文件存储可以看到使用了Windows DPAPI加密。但是如果更改默认设置例如使用的外部存储如redis则此时密钥默认是不加密的微软说…

scanf(“%s“)真的只开读入字符串大小就可以了吗??

文章目录前言还原过程计算机程序背后的故事总结瞎逼逼前言 艹艹艹艹艹艹&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;老子没想到没想到&#xff0c;靠&#xff01; 本人刚刚在做树链剖分“染色”一题的代码重构&#xff0c;上午打…

P5299-[PKUWC2018]Slay the Spire【dp】

前言 正题 题目链接:https://www.luogu.com.cn/problem/P5299 题目大意 有2n2n2n张牌&#xff0c; nnn张强化牌&#xff0c;每张上有一个正整数x(x>1)x(x>1)x(x>1)&#xff0c;如果使用后之后的每一张攻击牌伤害都会乘上xxx。nnn张攻击牌&#xff0c;每张上有一个正…

asp.net core2.2 多用户验证和授权

asp.net core2.2 用户验证 和授权有很详细和特贴心的介绍&#xff0c;我感兴趣的主要是这两篇&#xff1a;cookie身份验证基于角色的授权我的项目有两类用户&#xff1a;微信公众号用户&#xff0c;用户名为公众号的openid企业微信的用户&#xff0c;用户名为企业微信的userid每…

P1494 [国家集训队]小Z的袜子

P1494 [国家集训队]小Z的袜子 题意&#xff1a; 有一个长度为 n 的序列c[i] 。现在给出 m个询问&#xff0c;每次给出两个数l,r &#xff0c;从编号在 l 到 r 之间的数中随机选出两个不同的数&#xff0c;求两个数相等的概率。 题解&#xff1a; 很明显&#xff0c;莫队算法…

一文带你快速读懂.NET CLI

dotnet cli 是 .Net Core 功能中最有用的特性之一。在这篇文章里&#xff0c;我们将介绍几个.Net OSS 工具是如何使用 dotnet cli&#xff0c;并介绍如何在日常开发中使用新的 cli 工具。正文关键要点dotnet cli 使得基于. Net 项目的自动化和脚本编写变得非常简单&#xff0c;…

[POJ 3164]Command Network(最小树形图,朱刘算法)

文章目录titlesolutioncodetitle solution 读完翻译后&#xff0c;很明显就是个朱刘算法的板子题 最小树形图&#xff0c;就是给出一个带权有向图 从中指定一个特殊的结点 root 求一棵以 root 为根的有向生成树 T&#xff0c;且使得 T 中所有边权值最小 简单来说&#xff0c…

ASP.NET Core 3.0:将会拥有更少的依赖

在ASP.NET Core项目中&#xff0c;我们使用一个叫做Microsoft.AspNetCore.App的综合包。它也被称为ASP.NET Core Shared Framework&#xff0c;在ASP.NET Core Shared Framework之中包含了很多依赖项&#xff0c;它能满足一般应用的需求。但是如果你查看它的依赖项&#xff0c;…

CSP2021NOIP2021游记

CSP Day -? 初赛 初赛考前没怎么复习&#xff0c;反倒是理直气壮的翘了一周晚修&#xff08;虽然后面就一直翘了&#xff09;。 开考之后才发现要拿那几张纸&#xff0c;监考让我考完再出去拿。 选择题很简单&#xff0c;没有啥犹豫的写完了&#xff0c;第一道读程序写结果好…

微软上线Try .NET,支持在浏览器运行C#代码

微软Try .NET项目近期上线&#xff0c;这一项目允许用户通过浏览器运行和编写C#代码&#xff0c;同时还支持完整的代码提示。用户可以通过访问这一项目官网&#xff08;点此进入&#xff09;对Try .NET这一项目进行简单了解。该项目允许开发人员在浏览器中运行和编辑C#代码片段…

[LOJ]体育成绩统计 / Score (无脑模拟,没有脑子,就是上!)

题目 好久没敲过恶心的模拟题了&#xff0c;莫名有点怀念是什么鬼&#xff0c;我还记得我的zamjena 没啥想说的&#xff0c;这道题就是没智商有码力的 纯粹是纪念一下今天上午直接肝了的两个半小时&#xff0c;真的一点思维都不需要有&#xff0c;直接上&#xff01;&#xff0…

程序员修仙之路--设计一个实用的线程池

菜菜呀&#xff0c;我最近研究技术呢&#xff0c;发现线上一个任务程序线程数有点多呀CEO,CTO,CFO于一身的CXOx总&#xff0c;你学编程呢&#xff1f;菜菜作为公司总负责人&#xff0c;我以后还要管理技术部门呢&#xff0c;怎么能不会技术呢CEO,CTO,CFO于一身的CXO&#xff08…

Code Names

Code Names 题意&#xff1a; 如果一个字符串通过交换两个位置可以得到另一个字符串&#xff08;也就是两个字符串只有两个位置不一样且为交换关系&#xff09;&#xff0c;我们称这两个字符串为替代关系。 现在给出n个字符串&#xff0c;求一个集合&#xff0c;使得集合内的…

【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)

未完待续...T1&#xff1a;牛牛的方程式titlesolutioncodeT2&#xff1a;牛牛的猜数游戏titlesolutioncodeT3&#xff1a;牛牛的凑数游戏titlesolutioncodeT1&#xff1a;牛牛的方程式 title solution 因为浮点错误炸了70pts 这个三元一次不定方程呢&#xff0c;其实也没有…