标题1.什么是辗转相除法?
辗转相除法是用于求两个数最大公约数的一种著名算法
有两个整数A,B,求其最大公约数GCD(A,B)
标题2.GCD是什么
最大公约数 —— Greatest Common Divisor(GCD)
标题3.算法核心?
算法基于一个数学定理:
两个数的最大公约数等于其中较小的数字和二者之间余数的最大公约数
A = B * C + D
A,B,C,D分别是被除数,除数,商,余数
则有
GCD(A,B) = GCD(B,D)
基于该等式,可以用函数递归实现该算法
标题4.证明?
我们粗略证明A,B,D有共同的因子
假设A,B有公约数k,那么可以写出等式:
A = ak
B = bk
由A = B * C + D
得
D = (a - b * C) * k
所以D也有因子k
利用递归GCD(A,B) = GCD(B,D)
当余数为0时,除数就是最大公约数
//辗转相除法,求x,y最大公约数,其中参数x >= y
int GCD(int x,int y){
return y == 0 ? x : GCD(y,x % y);
}