[更正]C语言求两数最大公约数和最小公倍数

C/C++
253
0
0
2022-11-14

写在前面

img

上图中 15 / 3 = 5 · · · · · · 0 由于笔误,3和5的位置书写错误,根据辗转相除法,正确的书写是 15 / 5 = 3 · · · · · · 0 ,感谢大佬的反馈!

辗转相除法又名欧几里德算法,是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

———来源:搜狗百科

核心思路

求最大公约数方法:辗转相除法

求最小公约数方法:(num1 x num2)÷最大公约数

例:求125 15 两数的最大公约数和最小公倍数。

解:125 / 15 = 8 ······· 5

15 / 5 = 3 ······· 0

所以两数的最大公约数为5,最小公倍数为 (125 x 15) ÷ 5 = 375

C语言代码

#include <stdio.h>

int main() {
    int a, b, n1, n2, t; // 声明a b n1 n2 t 
    printf("请输入两位数:\n");
    scanf("%d %d", &a, &b); // 用户输入a b
    n1 = a; // 赋值
    n2 = b; // 赋制 
    //辗转相除开始 
    while (n2) {
        t = n1 % n2;
        n1 = n2;
        n2 = t;
    }
    //辗转相除结束 
    //输出结果 
    printf("最大公约数 %d\n", n1);
    printf("最小公倍数是 %d\n", a * b / n1);
    return 0;
}

运行编译上述代码,输入125 15,将会得到以下结果:

请输入两位数:
125 15
最大公约数 5
最小公倍数是 375