http://www.cnblogs.com/keam37/ keam所有 转载请注明出处
一、欧几里得算法:
虽然这是个几乎所有基础书都会写的算法但为了解释拓展欧几里得还是先写下来,并给予证明。
gcd(x,y)为x,y的最大公约数
有gcd(x,y)=gcd(y,x mod y)
证明:
设gcd(x,y)=k;
有 x|k;y|k;
设x mod y=r;即 x=n*y+r;
因为x|k ,则 (n*y+r)|k;
显然 r|k;
证毕。
得到gcd(x,y)=gcd(y,x mod y)后就可以不断迭代最后使 x mod y=0;此时的y即使所求的最大公约数
递归版的代码 如下
1 int gcd(int a,int b) 2 { 3 if(b==0) 4 return a; 5 return 6 gcd(b,a%b); 7 }