辗转相除法
用较小数去除较大数,再用出现的余数(第一余数)去除除数
再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数等于0
如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
另:最小公倍数 = 两个正整数的乘积 除以 最大公约数
m, n 为输入的数 p 为两个数的乘积
flag 用来表示“第一余数”,“第二余数”…
temp用来交换数据,让大的数作为被除数
代码如下:
int main(){
int m, n, p, flag, temp;
printf("请输入m和n的值:");
scanf("%d%d", &m, &n);
// 始终让 m > n
if (m < n){
temp = m;
m = n;
n = temp;
}
p= m * n;
flag = m % n;
while (flag != 0){
m = n;
n = flag; //此时n的值已经被改变
flag = m % n;
}
printf("最大公约数=%d,最小公倍数=%d",n,p / n);
return 0;
}
运行结果: