数论基本算法学习笔记

数论基本知识

裴蜀定理

不定方程ax+by=c有解当且仅当cgcd(a,b)的倍数。

证明

S={|μa+νb|μ,νZ},γ=μ0a+ν0b,|γ|S,|γ|a,bδ|a,δ|ba=δο,b=δλγ=μ0οδ+ν0λδδ|γτ=μ1a+ν1bτγτ=ωγ+ξ,|ξ|<|γ|ξμa+νbξ0|γ|Sγ|τ,γSγa,bax+by=cgcd(a,b)|cax+by=gcd(a,b)gcd(a,b)|cax+by=cax+by=ccgcd(a,b)广

扩展欧几里得算法

扩展欧几里得算法目的是求出ax+by=gcd(a,b)的一组特解。

ax+by=gcd(a,b)=gcd(b,a%b)bx+(a%b)y=gcd(b,a%b),x0,y0bx0+(aabb)y0=gcd(b,a%b)ay0+(x0aby0)b=gcd(a,b)x1=y0,y1=x0aby0ax+by=gcd(a,b)

欧拉定理

欧拉函数φ(n)=i=1n[gcd(i,n)=1]
计算式

nn=k=1mpkakφ(n)=ni=1mnpi+1i<jmnpipj++(1)mnp1p2pm=nk=1m(11pk)

欧拉定理gcd(a,n)=1aφ(n)1(modn)
证明

S={x|1xngcd(n,x)=1}T={ax|xS}b=axT,b=kn+r,gcd(r,n)=1gcd(n,a)=1gcd(n,x)=1b1,b2T,b1=ax1,b2=ax2x1,x2S,x1x2b1b2(modn)ax1ax2(modn),a,n,x1x2(modn)SxSxxTxaφ(n)xSxaφ(n)1(modn)PS:nprimepprime,gcd(a,p)=1ap11(modp)

扩展形式an{anmodφ(m),gcd(a,m)=1an,gcd(a,m)1n<φ(m)anmodφ(m)+φ(m),gcd(a,m)1nφ(m)(modm)
证明

gcd(p,q)=1,ab(modp),ab(modq)ab(modpq)ab(modp)p|ab,ab=k1p,,ab=k2qp|k2qp,qp|k2ab|pqab(modpq)m=k=1tpkakananmodφ(m)+φ(m)(modpkak)kgcd(a,pkak)=1aφ(pkak)1(modpkak),φ(pkak)|φ(m),ananφ(m)φ(m)+nmodφ(m)+φ(m)anmodφ(m)+φ(m)(modpkak)gcd(a,pkak)1pk|anφ(m)φ(pkak)akpkak|anan0(modpkak)anmodφ(m)+φ(m)0(modpkak)ananmodφ(m)+φ(m)(modpkak)ananmodφ(m)+φ(m)(modm)

幂塔问题:求解2222modp

f(p)=2222modp,f(p)=2f(φ(p))+φ(p)2222p使pφ(p)pφ(p)O(log2p)

中国剩余定理

有同余方程组{xa1(modb1)xa2(modb2)xan(modbn)需要求出满足方程组的最小整数解。

x=k1b1+a1=k2b2+a2k1b1k2b2=a2a1k10,k20k1=k10+b2gcd(b1,b2)t,k2=k20+b1gcd(b1,b2)tx=k1b1+a1=k10b1+b1b2gcd(b1,b2)t+a1xk10b1+a1(modlcm(b1,b2))

卢卡斯定理

定理(nm)(npmp)(n%pm%p)(modp)其中p是素数。

证明

(pa)p!a!(pa)!0(modp),1<a<pn=sp+t,m=qp+r(1+x)n((1+x)p)s(1+x)t(1+xp)s(1+x)ti=0s(si)xipj=0t(tj)xjxmi=q,j=r(nm)(sq)(tr)(modp)

扩展形式:求解(nm)modp,其中p不是质数

p=k=1mpkak(nm)modpkak(nm)=n!m!(nm)!,m!pk(nm)=n!pkf(n)m!pkf(m)(nm)!pkf(nm)pkf(n)f(m)f(nm)f(n)n!pkn!pkf(n)g(n)=n!pkf(n),g(n)pknpkg(npk)(i=1pk|ipkak1i)npkaki=npkakpkak+1pk|ini(nm)=g(n)g(m)g(nm)pkf(n)f(m)f(nm),g(m),g(nm)pkakexgcdf(n)=npk+f(npk)

库默尔定理

定理(n+mm)中含有质因子p的数量等于n+mp进制下进位的次数。
证明

n!pi=1npi,(n+mm)pi=1n+mpinpimpinpinpin+mpinpimpin+mpi1

二次剩余

定义:设m是正整数,a是整数,若gcd(a,m)=1,且同余方程x2a(modm)有解,则称am的二次剩余。若同余方程x2a(modm)无解,则称am的二次非剩余。
引理1:设p是奇素数,a是不被p整除的整数,则同余方程x2a(modp)或者无解,或者有两个模p不同余的解。
证明

x2a(modp)x=x0,x=x0(x0)2=x02a(modp)x0x0(modp)p|2p|x0x0,x1x2a(modp)x02x12p|x0+x1p|x0x1x1x0x1x0(modp)

定理1:若p是奇素数,那么在整数1,2,3,,p1中,p的二次剩余恰好有p12个,二次非剩余恰好有p12个。
证明

12,22,,(p1)2p1p1x212(modp)2x222(modp)1x2a(modp)p1,2,,p1pp12p12p

勒让德符号:设p是奇素数,整数a不被p整除,勒让德符号定义为(ap)={1,ap1,ap

欧拉判别法:设p是奇素数,正整数a不被p整除,则(ap)ap12(modp)
证明

(ap)=1x2a(modp)x0ap12(x02)p12x0p11(modp)(ap)=1,(i,p)=1ijija(modp),x2a(modp)ij1,2,,p1p12a(p1)!ap121(modp)(ap)ap12(modp)PS:,(ap)(bp)(abp)(modp)

Cipolla算法

Cipollax2n(modp)pgcd(n,p)=1r使r2np1pri2r2n(modp)r2npi仿i2r2n(modp)ipi(i2)p12i(modp)(a+b)pap+bp(modp)(r+i)p+1(rp+ip)(r+i)(ri)(r+i)n(modp)(r+i)p+12x2n(modp)(r+i)p+120A,B(A+Bi)2n(modp),B0(modp)A2+2ABi+(Bi)2n(modp)A=0i2nB2B2pB2pnpB2npi2p(r+i)p+12x2n(modp)

一些例子

  • 求解auu(modm),要求0u1018T组数据,T103,1a<m109

由扩展欧拉定理uauac(modm),c[φ(m),2φ(m)),{uac(modm)uc(modφ(m))ac+k1m=c+k2φ(m),此方程有解的充要条件是acc(modgcd(m,φ(m)))因此考虑递归的求解子问题,递归到最后gcd一定会变成1此时方程显然有解

  • 求解同余方程组xpiqi(modn),其中n=k=1tpi,pi为两两不同的质数,无解输出1n1018,0qi<n

xpiqi(modn)的一个必要条件是xpiqi(modpi)xqi(modpi)接下来直接用中国剩余定理合并即可解出一个x而这个x是由必要条件得到的,因此只需要代回检验是否满足原方程组,若是则他就是解,否则无解

  • n种颜色的球,其中第 i 种颜色的球共有 ai 个,同色的球无法区分。定义第 lr 种颜色的混乱度 f(l,r) 为:将第 lr 种颜色的所有球排成一排,总共的方案数对 p 取模后的值。求l=1nr=lnf(l,r),1n5×1050ai1018p{2,3,5,7}

suml,r=i=lraif(l,r)=(suml,rar)f(l,r1),f(l,l)=1f(l,r)=i=lr(suml,iai)由于模数很小,会有很多区间的值为0,考虑什么时候区间的值为0由库默尔定理al,,arp进制下做加法发生进位时f(l,r)=0,f(l,r)=0f(l,r+1)=0我们可以固定左端点,找到右侧第一个使得区间值为0r,暴力计算f(l,l)f(l,r)由于每次至少会把suml,r1位的值加1,对于一个固定的左端点,暴力计算的次数不超过O(plogpw)

posted @   clapp  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示