码迷,mamicode.com
首页 > 其他好文 > 详细

同余方程,不定方程总结

时间:2014-09-22 20:09:43      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   ar   strong   div   sp   

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

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

 

 

单个一元线性方程

求解方法:扩展欧几里得 exgcd

模板:

bubuko.com,布布扣
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)型

 

 

 

三.特殊的不定方程

 

 

 

费马大定理

 

 

毕达哥拉斯三元组

 

 

佩尔方程

 

同余方程,不定方程总结

标签:style   blog   http   color   os   ar   strong   div   sp   

原文地址:http://www.cnblogs.com/oneshot/p/3986250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!