一、问题
用辗转相除法(即欧几里得算法)求两个正整数的最大公约数和最小公倍数
二、代码
#include <stdio.h>
int main() {
int m,r,a, b;
scanf("%d %d", &a, &b);
m = a * b;
if (a < b) {
int temp = b;
b = a;
a = temp;//交换后 a>b
}
r = a % b;
while (r)
a = b;
b = r;
r = a % b;
printf("最大公因数为:%d\n", b);
printf("最小公倍数为;%d", m / b);
return 0;
}
三、tips
ps:电脑突出bug,无法运行,之后再检验代码是否正确
1.最大公因数:
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 ÷ 615 = 3 (余 152)
615 ÷ 152 = 4(余7)
152 ÷ 7 = 21(余5)
7 ÷ 5 = 1 (余2)
5 ÷ 2 = 2 (余1)
2 ÷ 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。
2.最小公倍数
最小公倍数就等于这两个数的乘积数以最大公约数
例如求a,b的最小公倍数
最小公倍数 = a*b /(a与b的最大公约数)