辗转相除法求最大公约数(C 语言实现)
辗转相除法,一种求最大公约数的算法
已知:A / B = C ······ R (A、B、C、R 皆是整数)
假设:D 是 A 的余数,D 也是 B 的余数,那么 D 就是 A 和 B 的公约数
D 是 A 和 B 的约数,则 A 和 B 是 D 的倍数,B * C 也是 D 的倍数
既然 A 与 B*C 都是 D 的倍数,那么 A 与 B*C 的差也是 D 的倍数
A - B*C = R
所以 R 也是 D 的倍数
如果 D 是 A 或 B 的公约数,那么 D 也是 B 和 R 的公约数
故:(A,B)= (B,R)
由以上证明则可以求出最大的公约数
例如:求 72 和 28 的最大公约数
72 / 28 = 2 ······ 16
↓ ↓ ↓ ↓
28 / 16 = 1 ······ 12
↓ ↓ ↓ ↓
16 / 12 = 1 ······ 4
↓ ↓ ↓ ↓
12 / 4 = 3 ······ 0
现在可以知道 72 与 28 的最大公约数是 4
复制代码
评论