拓展欧几里得和同余方程:OI数论(2)
1.同余
定义:若整数和整数除以正整数的余数相同,则称,模同余
记为
2.两个有用的定理
费马小定理:若为质数,则对于任意整数,有
欧拉定理:若正整数和互质,则
感兴趣的读者可以自行搜索相关定理的证明,笔者在此不提供
3.拓展欧几里得算法
还是先给一个定理
裴蜀定理:对于任意整数,存在一对整数满足
为了方便大家理解下面的知识,在此简要给出它的证明:
总结一下,整个思路是在欧几里得算法的递归过程中利用数学归纳法得出来的,所以我们如果要计算这一对,就可以利用欧几里得算法进行计算
这个算法被称为拓展欧几里得算法
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和整数对
4.更加一般的情况?
对于更加一般的方程来说,它有解当且仅当
我们要解这个方程,只要首先解出的一组解,然后再把这组解乘上就得到了原方程的一组解
5.乘法逆元
我们知道,在取模时加法减法和乘法的取模都是自由的,而除法却不行,导致在一些计数问题中我们无法很好地取模导致精度无法承受,
这时就要想一些方法使得取模变得自由,乘法逆元就是这个方法
乘法逆元的定义:若整数互质,且,则存在整数,使得,我们称为的模乘法逆元,记为
如果,因此
当为质数的时候,并且,根据费马小定理,,即
因此,当模数为质数的时候,即为的逆元
当然对于更一般的情况,即仅仅是互质的时候,需要求解同余方程来得到,这个的解法我们后面再说
貌似知识点讲的太多了,我们来说一道例题
本文来自博客园,作者:羊扬羊,转载请注明原文链接:https://www.cnblogs.com/sheepcsy/p/16508302.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】