扩展欧几里德算法
問題:對于正整數a,b,求整數x,y滿足:
ax+by=gcd(a,b)
解法:ExtandedGCD
已知gcd(a,b)=gcd(b,a mod b);
設gcd(a,b)=d
假設已求出x1,y1滿足bx1+(a mod b)y1=d(*)
因為a mod b=a-(a div b)*b(**)
(**)代入(*)得:
ay1+(x1-(a div b)*y1)b=d
所以x=y1
y=x1-(a div b)*y1.
遞歸求解直到b=0返回(x=1,y=0)即可
Code:
1: Program ExtandedGCD; 2: ? 3: var 4: a,b,x,y : longint; 5: ? 6: Function ExtGCD(a,b:longint;var x,y:longint):longint; 7: var 8: t : longint; 9: begin 10: if b=0 then 11: begin 12: ExtGCD:=a; 13: x:=1; 14: y:=0; 15: exit; 16: end; 17: ExtGCD:=ExtGCD(b,a mod b,x,y); 18: t:=x; 19: x:=y; 20: y:=t-(a div b)*y; 21: end; 22: 23: begin 24: readln(a,b); 25: writeln(ExtGCD(a,b,x,y)); 26: writeln(x,' ',y); 27: end.轉載于:https://www.cnblogs.com/Lr-bob/archive/2012/01/30/2332482.html
總結
- 上一篇: 详细的DedeCMS(织梦)目录权限安全
- 下一篇: OneNote | 代码高亮插件 Not