解题思路:
这个题目如果你了解过辗转相除法(欧几里得算法)那就很简单了

辗转相除可以求得最大公约数

gcd(a, b) = gcd(b, a % b)

举个例子:

第 1 步:

a=24,b=18

24 % 18 = 6

第 2 步:

a=18,b=6

18 % 6 = 0

余数为 0 → 结束

最大公约数 = 6

最大公倍数= 两数的乘积/最大公倍数
参考代码:

#include <iostream>
using namespace std;

int main() {
    int m, n;
    cin >> m >> n;

    // 保存原来的 m 和 n,用来算最小公倍数
    int a = m, b = n;

    // 辗转相除法求最大公约数
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    int gcd = a;  // 最大公约数

    // 最小公倍数公式:两数乘积 / 最大公约数
    int lcm = m * n / gcd;

    cout << gcd << " " << lcm << endl;
    return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论