词条 | 扩展欧几里德定理 |
释义 | 扩展欧几里德定理对于与不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数。那么存在唯一的整 数 x,y 使得 gcd(a,b)=ax+by。 c++语言实现#include<iostream> using namespace std; int x,y,q; void extend_Eulid(int a,int b) { if (b==0) { x=1; y=0; q=a; } else { extend_Eulid(b,a%b); int temp=x; x=y; y=temp-a/b*y; } } int main() { int a,b; cin>>a>>b; if (a<b) swap(a,b); extend_Eulid(a,b); printf("%d=(%d)*%d+(%d)*%d\",q,x,a,y,b); } 求解 x,y的方法的理解设 a>b。 1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0; 2,ab<>0 时 设 ax1+by1=gcd(a,b); bx2+(a mod b)y2=gcd(b,a mod b); 根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b); 则:ax1+by1=bx2+(a mod b)y2; 即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2; 根据恒等定理得:x1=y2; y1=x2-(a/b)*y2; 这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2. 上面的思想是以递归定义的,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以 结束。 |
随便看 |
|
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。