辗转相除法
算法:辗转相除法(欧几里德算法)
首先需要清楚的是:
任意整数和0的公约数是该整数的所有约数,它们的最大公约数为该整数本身
因为0被所有非0整数整除,所以任意非零的整数都是0的约数。
看过许多证明,还是百度百科的最为简单易懂且思路明确。
以下的原理及证明摘自百度百科:
原理:
设两数为a、b(a≥b),求a和b最大公约数
的步骤如下:
(1)用a除以b(a≥b),得
。
(2)若
,则
;
(3)若
,则再用b除以
,得
.
(4)若
,则
;若
,则继续用
除以
,......,如此下去,直到能整除为止。
其最后一个余数为0的除数即为
的最大公约数。
证明:
第一步:令
,则设
第二步:根据前提可知
第三步:根据第二步结果可知,
也是
的因数
证毕
注:以上步骤的操作是建立在刚开始时r不等于0的基础上的,即m与n互质。
代码:
1 int gcd(int a, int b) 2 { 3 if(b == 0) return a; 4 return gcd(b, a % b); 5 }

浙公网安备 33010602011771号