首页 > 代码库 > 同余方程,不定方程总结

同余方程,不定方程总结

听说这是数论中比较重要的部分了,一点点的总结吧。。

一.线性同余方程与不定方程:

 

 

单个一元线性方程

求解方法:扩展欧几里得 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;}
View Code

原理:对于整数 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)型

 

 

 

三.特殊的不定方程

 

 

 

费马大定理

 

 

毕达哥拉斯三元组

 

 

佩尔方程

 

同余方程,不定方程总结