欧几里德算法用来求2个自然数的最大公约数(GCD),数论有定理指出这两个自然数分别乘以一定的整数系数然后相加可以得到他们的GCD,且该GCD是这两个数组合能得出的最小正整数。扩展的欧几里德算法用来计算这两个数的GCD及相加得到GCD组合系数。
算法是先用欧几里德算法得出递推方法,然后采用递归。给出了2个递归算法。
#include<iostream> using namespace std; int x,y,gcd; void extend_Eulid(int a,int b) { if (b==0) { x=1; y=0; gcd=a; } else { extend_Eulid(b,a%b); int temp=x; x=y; y=temp-a/b*y; } } void extend_Eulid2(int a,int b) { if (a%b==0) { x=0;y=1;gcd=b; } else { extend_Eulid(b,a%b); int temp=x; x=y; y=temp-a/b*y; } } int main() { int a,b; cout<<"Input two numbers:"; cin>>a>>b; if (a<b) swap(a,b); //extend_Eulid(a,b); extend_Eulid2(a,b); cout<<"GCD="<<gcd<<"=("<<x<<")*"<<a<<"+("<<y<<")*"<<b<<endl; system("pause"); return 0; }