首页 > 代码库 > 同余方程,不定方程总结
同余方程,不定方程总结
听说这是数论中比较重要的部分了,一点点的总结吧。。
一.线性同余方程与不定方程:
单个一元线性方程
求解方法:扩展欧几里得 exgcd
模板:
long long exgcd(long long a,long long b,long long &x,long long &y){ if(!b) { x=1; y=0; return a; } __int64 tt=exgcd(b,a%b,x,y); __int64 t; t=x; x=y; y=(t-a/b*y); return tt;}
原理:对于整数 a,b。存在 x,y使 x*a+y*b=gcd(a,b);
当b=0时,有gcd(a,b)=a,显然此时 x=1,y=0.
exgcd算法可以在朴素 gcd 中的一步一步的递归中迭代更新 x,y的值,最终求出 x*a+y*b=gcd(a,b)的一组解。
利用exgcd求不定方程 x*a+y*b=c 解的步骤:
(1).用 exgcd求出 d=gcd(a,b) 和 x*a+y*b=gcd(a,b) 一组解 x0,y0 ;
(2).判断 c%d==0,则有解,否则无解
(3).令 x=x0*c/d,y=y0*c/d;则得到此方程的一组解 x,y
(4).若需要求最大最小解,再线性变换 x,y查找。
例: x*a+y*b=c ,y每增加1,x减小b/a,化为互质整数:y增加a/d,x减小b/d,可见x的周期是b/d
所以要找最小的x 只需要 x=(x%(b/d)+b/d)%(b/d)即可。
求解同余方程 a*x==b mod m,可转化为求 x*a+y*m=b,套用上面的步骤求解即可
例题 poj1061 poj2115
一元一次同余方程组 (x=b[i](mod a[i]) ):
朴素解法:
思想:方程的合并,转化为单个同余方程
参考资料 http://www.cnblogs.com/heweiyou1993/p/3301894.html
模板:
例题:
中国剩余定理:
多元线性同余方程组:
二.高次同余方程组
a^x ==b (mod c)型
三.特殊的不定方程
费马大定理
毕达哥拉斯三元组
佩尔方程
同余方程,不定方程总结