欧几里得算法(Euclidean algorithm)
欧几里德算法又称辗转相除法,用于计算两个正整数 , 的最大公约数。
计算公式
其中 是 除以 的余数(取余运算),也可以写成 。
证明方法
对于任意正整数
,
,都有
所以有
假设
是
和
的最大公约数,即
所以可得
且
(
表示能整除),又因为
,得
又因为
,可得
即
代码实现
迭代方法:
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
递归方法:
int gcd(int a,int b)
{
while(b)
{
a = a%b;
swap(a,b);
}
return a;
}
两种算法的本质是一样的。