数论基础:扩展欧几里得和乘法逆元,欧拉函数

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

欧几里得算法(求最大公约数)

gcd(int a,int b)
{
	return b==0?a:gcd(b,a%b);
}

扩展欧几里得

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

斐蜀定理:一定存在ax+by=gcd(a,b)的解

gcd(a,b)|a=>gcd(a,b)|ax ----------(1)

gcd(a,b)|b=>gcd(a,b)|by ----------(2)

(1)(2)=>gcd(a,b)|ax+by=>ax+by=gcd(a,b) 两边同除gcd(a,b)

a1 x1 + b1 y1 =1 ( a1 , b1 互质)

=>exgcd()

扩展欧几里得

ax+by=gcd(a,b) 的一组特解

b=0x=1,y=0

否则先求 b,a的解

求得bx1+(a%b)y1=gcd(b,a%b)=gcd(a,b)

bx1+[aa/bb]y1

ay1+b(x1a/by1)

与ax+by对比,发现只要令x=y1y=x1a/by1就能得到特解因此,只要一直递归就能求解

通解(没有遗漏)

x=x0+b/gcd(a,b)

y=y0a/gcd(a,b)

x,y同时变化,带入原式可发现ax+by不变

证明挖坑优秀的证明

upd: 之前一直忽略的点,关于通解,实际上对于ax+by=c都可以用同样的通解式子

乘法逆元

exgcd

求解逆元a1(modb)相当与解不定方程ax+by=1

a,b如果互质,exgcd()求解即可

费马小定理:

定理: 若p为素数,则有

ap11(modp)

ap2a1(modp)

ap2就是amod p意义下的逆元

递推求逆元

upd: 记不住怎么办,有个好记的方法,类似求阶乘逆元的方法,处理前缀积,然后费马求出总的逆元再乘回去,实际上这种做法可扩展性非常强

原理:p是模数,i是待求的逆元,我们求的是i1mod p意义下的值

p=ki+rr<i,则k=p/i,r=p%i

ki+r0(modp)

kr1+i10(modp)(两边同乘 r1 i1 )

i1kr1(mod;p)

i1p/iinv[p%i](modp)

所以inv[i]=(p/i)inv[p%i]

边界inv[1]=1

    inv[1]=1;
    for(int i=2;i<=n;i++)
        inv[i]=(p-p/i)*inv[p%i]%p;
        //(p-p/i)处理了负数问题 因为p%p=0所以对结果无影响

递推求阶乘逆元

因为

1(n+1)!×(n+1)=1n!

所以处理出inv[n]再逆推inv[n1]inv[n2]........

欧拉函数

定义

φ(n)表示i=1n1gcd(i,n)==1?1:0

一些性质

  • n为质数时有φ(n)=n1

  • φ(n)为积性函数,但不是完全积性函数

即,当gcd(a.b)=1时有φ(ab)=φ(a)×φ(b)

  • n=d|nφ(d)

证明:

gcd(x,n)=y,那么gcd(xy,ny)=1(x<n)

fi表示gcd(x,n)=i的数的个数,那么有n=i=1nfi

fi=φ(ni)

那么n=i=1nfi=d|nφ(nd)

dnd具有对称性,所以可以化为n=d|nφ(d)

  • p为质数,n=pk,那么φ(n)=pkpk1

因为1pk除了p,2p,3p.....pk1ppk1p的倍数外都与pk互质

所以φ(pk)=pkpk1=pk1×(p1)

  • 由唯一分解定理,设n=i=1spiki ,其中 pi是质数,有 φ(n)=n×i=1spi1pi

证明:

因为积性

φ(n)=i=1sφ(piki)

因为上一个性质

=i=1s(pi1)×piki1

整理

=i=1spiki×(11pi)

=n i=1s(11pi)

求值

求单个欧拉函数使用φ(n)=n×i=1spi1pi,对n进行质因数分解即可

1n的欧拉函数,使用线性筛

对于质数,显然φ(n)=n1

对于合数n=prime[j]×i,分两种情况,就是i%prime[j]是否为0

  1. i%prime[j]!=0 那么 iprime[j]互质phi[n]=phi[i]phi[prime[j]]

  2. i%prime[j]=0那么i中有n的所有因子

phi[n]=n×k=1spk1pk=prime[j]×i×k=1spk1pk=prime[j]×phi[i]

欧拉定理

gcd(a,m)=1,则aφ(m)1(modm)

特别的,当m为质数时,就是费马小定理

证明:

r1,r2,,rφ(m)为模m意义下的一个简化剩余系,则ar1,ar2,,arφ(m)也为模 意义下的一个简化剩余系。所以r1r2rφ(m)ar1ar2arφ(m)aφ(m)r1r2rφ(m)(modm),可约去r1r2rφ(m),即得aφ(m)1(modm)

扩展欧拉定理

ab{abmodφ(p),gcd(a,p)=1ab,gcd(a,p)1,b<φ(p)abmodφ(p)+φ(p),gcd(a,p)1,bφ(p)(modp)

证明,转一下大佬的博客

posted @   Chen_jr  阅读(57)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示