扩展gcd
2017-06-21 19:58
127 查看
相信大家已经学会如何解二元一次方程组了
对于{a1x+b1y=c1a2x+b2y=c2 在有解的情况下
{x=b2c1−b1c2a1b2−a2b1y=a1c2−a2c1a1b2−a2b1即{x=|c1 b1c2 b2||a1 b1a2 b2|y=|a1 c1a2 c2||a1 b1a2 b2|
但是对于不定方程ax+by=c(a,b,c为整数)怎么求出其中一组整数解呢?
首先我们记d=gcd(a,b),如果c%d≠0(“%”表示取模”mod”,下同),那么方程ax+by=c无整数解,(表示不会证,具体参看贝祖定理)
那么根据裴蜀定理(其实是一个东东),可得对于ax+by=c(d|c)都有一组整数解
设c′=c/d,x′=x/c′,y′=y/c′ 有方程ax′+by′=gcd(a,b),最后求出x,y即可。
那么对于方程ax+by=gcd(a,b)如何去解呢?
首先我们知道gcd(a,b)=gcd(b,a%b)
prove:
若a < b ,则a%b=a,gcd(b,a%b)=gcd(b,a)=gcd(a,b)
若a > b ,则a%b=a−kb(k∈N+)
设c=gcd(a,b),a=pc,b=qc则p,q互质,a%b=(p−kq)c
∵gcd(q,kq)=q,p,q互质∴p−kq≡p(modq)∴gcd(q,p−kq)=1
∴gcd(b,a%b)=gcd(qc,(p−kq)c)=c=gcd(a,b)
有了上面这个定理后,方程可以进行如下变换:
∵ax+by=gcd(a,b)∴bx+(a%b)y=gcd(b,a%b)
∵gcd(a,b)=gcd(b,a%b)∴ax+by=bx+(a%b)y=bx+(a−[ab]b)y
∴ax+by=ay+b(x−[ab]y)①
我们设f(a,b)=(x,y) 表示方程ax+by=gcd(a,b)的一组整数解x,y
令f(b,a%b)=(x′,y′)
对于任意a,b要使式子①成立有x=y′,y=x′−[ab]y′
当b=0时,此时x=1,y=0即可满足条件
所以扩展GCD是个以普通GCD为基础的递归。
代码如下:
对于{a1x+b1y=c1a2x+b2y=c2 在有解的情况下
{x=b2c1−b1c2a1b2−a2b1y=a1c2−a2c1a1b2−a2b1即{x=|c1 b1c2 b2||a1 b1a2 b2|y=|a1 c1a2 c2||a1 b1a2 b2|
但是对于不定方程ax+by=c(a,b,c为整数)怎么求出其中一组整数解呢?
首先我们记d=gcd(a,b),如果c%d≠0(“%”表示取模”mod”,下同),那么方程ax+by=c无整数解,(表示不会证,具体参看贝祖定理)
那么根据裴蜀定理(其实是一个东东),可得对于ax+by=c(d|c)都有一组整数解
设c′=c/d,x′=x/c′,y′=y/c′ 有方程ax′+by′=gcd(a,b),最后求出x,y即可。
那么对于方程ax+by=gcd(a,b)如何去解呢?
首先我们知道gcd(a,b)=gcd(b,a%b)
prove:
若a < b ,则a%b=a,gcd(b,a%b)=gcd(b,a)=gcd(a,b)
若a > b ,则a%b=a−kb(k∈N+)
设c=gcd(a,b),a=pc,b=qc则p,q互质,a%b=(p−kq)c
∵gcd(q,kq)=q,p,q互质∴p−kq≡p(modq)∴gcd(q,p−kq)=1
∴gcd(b,a%b)=gcd(qc,(p−kq)c)=c=gcd(a,b)
有了上面这个定理后,方程可以进行如下变换:
∵ax+by=gcd(a,b)∴bx+(a%b)y=gcd(b,a%b)
∵gcd(a,b)=gcd(b,a%b)∴ax+by=bx+(a%b)y=bx+(a−[ab]b)y
∴ax+by=ay+b(x−[ab]y)①
我们设f(a,b)=(x,y) 表示方程ax+by=gcd(a,b)的一组整数解x,y
令f(b,a%b)=(x′,y′)
对于任意a,b要使式子①成立有x=y′,y=x′−[ab]y′
当b=0时,此时x=1,y=0即可满足条件
所以扩展GCD是个以普通GCD为基础的递归。
代码如下:
void exGcd(long long a,long long b,long long &x,long long &y){ if(b==0){x=1,y=0;return;} exGcd(b,a%b,x,y); long long t=y;y=x-a/b*y;x=t; }
相关文章推荐
- 扩展GCD-2
- 欧几里得gcd+扩展欧几里得exgcd模板
- [Codeforces338D]GCD Table(扩展中国剩余定理)
- 欧几里得算法(gcd)和扩展欧几里得
- 扩展gcd求解二元不定方程及其证明
- 扩展GCD 中国剩余定理(CRT) 乘法逆元模版
- POJ2115 C Looooops ——模线性方程(扩展gcd)
- hdu A/B 扩展gcd
- poj2115--C Looooops(扩展gcd)
- 扩展GCD
- gcd及扩展gcd
- POJ 2115 C Looooops 扩展gcd
- 扩展gcd
- POJ 2891 Strange Way to Express Integers(扩展GCD)
- uva 10673 Play with Floor and Ceil(扩展gcd)
- poj 1060---青蛙的约会 【扩展GCD】
- GCD及其扩展GCD详解
- codeforces 338D - GCD Table 扩展中国剩余定理
- 扩展GCD和线性模方程组
- SGU 106 The equation (扩展GCD/多特判)