两个整数的最大公约数是能够同时整除它们的最大的正整数。
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公约数的:
1. 若 r 是 a ÷ b 的余数, 则
gcd(a,b) = gcd(b,r)
2.a ÷ b,令r为所得余数(0≤r<b)
若 r = 0,算法结束;b 即为答案。
例:
求123和48的最大公约数
123 / 48 = 2.....27
48 / 27 = 1.....21
27 / 21 = 1.....6
21 / 6 = 3......3
6 / 3 = 2.......0
所以:最大公约数为3
while(m%n!=0)
{
r = m % n;
m = n;
n = r;
}
求最小公倍数:
最小公倍数=两数的乘积/最大公约(因)数