扩展欧几里得定理
2018-02-22 19:37
190 查看
朴素欧几里得定理
代码:int gcd(int a,int b){//a>=b if(b==0)return a; return gcd(b,a%b); }
不定方程
==在已知整数a,b的情况下求a*x+b*y=gcd(a,b)的一组整数解x,y==
这样的方程一定有解
x1=y2,y1=x2-a/b*y2;
证明略(核心就是把a%b换成a-k*b,然后展开、移项)
代码:
int gcd(int a,int b,int &x1,int &y1){ if(b==0){x1=1,y1=0;return a;} int x2,y2,d; d=gcd(b,a%b,x2,y2); x1=y2,y1=x2-a/b*y2; return d; }
==在已知整数a,b的情况下求
a*x+b*y=c的一组整数解x,y==
无解判定
如果c%gcd(a,b)!=0,则原方程无解,反则有解
通解
设x’,y’为a*x+b*y==gcd(a,b)的一组解,x,y为
a*x+b*y==c(c%gcd(a,b)==0)的解。令
d=gcd(a,b),那么有:
x=x'*c/d+k*b/d,
y=y'*c/d+k*a/d
解模线性方程
==a*x≡b(mod n)==
即
a mod n==b mod n
因为
(a-b)%n==0所以,
a*x-n*y==b,用扩欧定理解决
求乘法逆元
逆元记为a^(-1),与普通的倒数不同,它是mod n意义下的“倒数”,即a*a^(-1)==1(mod n)。
但a的逆元只在
ax-ny==1有解的时候才存在,即a,n必须互质。在
gcd(a,n)==1的前提下,
ax≡b(mod n)有唯一解,即a的逆元a^(-1)。
用途:除法取模
(a/b)%p ==(a*b^(-1))%p ==(a%p)*(b^(-1)%p)%p
代码:
int gcd(int a,int b,int x,int y){ if(b==0){x=1,y=0;return a;} int xx,yy,d; d=gcd(b,a%b,xx,yy); x=yy,y=xx-a/b*yy; return d; } int Inverse(int a,int b){ int x,y; if(gcd(a,b,x,y)==1)return ((x%b)+b)%b; return -1;//不存在逆元 }
相关文章推荐
- 扩展欧几里得、逆元、线性同余方程组、中国剩余定理总结
- 扩展欧几里得定理
- POJ 2891 Strange Way to Express Integers[中国剩余定理(非互质)][扩展欧几里得]
- POJ 1061 青蛙的约会 (扩展欧几里得定理)
- 扩展欧几里得定理
- 真正理解了扩展欧几里得定理
- 扩展欧几里得&&中国剩余定理 解线性同余方程组 专题
- 欧几里得定理与扩展欧几里得
- 当我真正理解了扩展欧几里得定理
- hdu Yet another end of the world(扩展欧几里得定理推论)
- 欧几里得定理及扩展欧几里得定理
- POJ1061扩展欧几里得定理
- bzoj 1407: [Noi2002]Savage【扩展欧几里得+中国剩余定理】
- 【数学/扩展欧几里得/Lucas定理】BZOJ 1951 :[Sdoi 2010]古代猪文
- 扩展欧几里得定理
- ACM: 一题数论题(扩展欧几里得定理…
- 扩展欧几里得的几个定理以及证明
- nyoj-775-整数性质(扩展欧几里得定理)
- Strange Way to Express Integers--扩展欧几里得和中国剩余定理
- 【数学/扩展欧几里得/Lucas定理】BZOJ 1951 :[Sdoi 2010]古代猪文