拓展欧几里得和同余方程:OI数论(2)

1.同余

定义:若整数a和整数b除以正整数m的余数相同,则称abm同余
记为ab(modm)

2.两个有用的定理

费马小定理:若p为质数,则对于任意整数a,有apa(modp)
欧拉定理:若正整数an互质,则aϕ(n)1(modn)

感兴趣的读者可以自行搜索相关定理的证明,笔者在此不提供

3.拓展欧几里得算法

还是先给一个定理

裴蜀定理:对于任意整数a,b,存在一对整数x,y满足ax+by=gcd(a,b)

为了方便大家理解下面的知识,在此简要给出它的证明:
a,bgcd
b=0x=1,y=0使a1+b0=gcd(a,0)
b>0,gcd(a,b)=gcd(b,amodb)b,amodbx,y使bx+(amodb)y=gcd(b,amodb)
bx+(amodb)y=bx+(abab)y=ay+b(xaby)
x=y,y=xabyx,y使ax+by=gcd(a,b)
总结一下,整个思路是在欧几里得算法的递归过程中利用数学归纳法得出来的,所以我们如果要计算这一对x,y,就可以利用欧几里得算法进行计算
这个算法被称为拓展欧几里得算法

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

利用函数传地址,拓展欧几里得同时得到了两个数的gcd和整数对x,y

4.更加一般的情况?

对于更加一般的方程ax+by=c来说,它有解当且仅当gcd(a,b)|c
我们要解这个方程,只要首先解出ax+by=d(gcd(a,b)=d)的一组解x0,y0,然后再把这组解乘上c/d就得到了原方程的一组解

5.乘法逆元

我们知道,在取模时加法减法和乘法的取模都是自由的,而除法却不行,导致在一些计数问题中我们无法很好地取模导致精度无法承受,
这时就要想一些方法使得取模变得自由,乘法逆元就是这个方法

乘法逆元的定义:若整数b,m互质,且b|a,则存在整数x,使得a/bax(modm),我们称xb的模m乘法逆元,记为b1(modm)

如果a/bab1a/bbb1modm,因此bb11(modm)
m为质数的时候,并且b<m,根据费马小定理,b11(modm),即bbm21(modm)
因此,当模数m为质数的时候,b(p2)即为b的逆元

当然对于更一般的情况,即仅仅是b,m互质的时候,需要求解同余方程bx1(modm)来得到,这个的解法我们后面再说

貌似知识点讲的太多了,我们来说一道例题

posted @   羊扬羊  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示