【欧几里得算法】
欧几里得算法(Euclid’s algorithm),又称辗转相除法。由欧几里得在大约两千多年前提出,该算法能够快速求得正整数a,b的最大公约数gcd(a,b)。
本文仅讨论非负数情况下的问题。
【算法描述】
我们一般以递归形式实现欧几里得算法:
int gcd(intx,int y){
if (!y) return x;
return gcd(y,x%y);
}
【证明】
显然,gcd(a,0)=a。那么证明上述算法的正确性就是要证gcd(a,b)=gcd(b,a%b)
在开始之前,先证明一个推论:
若c|a,c|b则c|(ax+by) 其中x,y为满足ax+by>0的任意整数。
设a=c*a0,b=c*b0则:
ax+by=c*a0*x+c*b0*y=c(a0*x