#include <stdio.h> //欧几里得算法求的最大公约数 int gcd(int a, int b) { //一定要确保a>b if (a < b) { int temp = a; a = b; b = temp;//作用是创建临时变量将a和b的数值置换 } while (b != 0)//当b不等于0时,继续执行循环 { int remainder = a % b;//计算余数 //算完余数后,进行新的计算,届时a位置上面的值由b替代 //也就是第二次计算时,b坐在第一次a的位置, // 第一次的余数坐在第一次计算时b的位置 a = b; b = remainder;//此时b的位置是余数 } //注意这个循环的条件b != 0 //当下一次计算的时候,上一次计算时 //算出的余数不为0,那么就在下一次计算的时候坐在b的位置 //但要是上一次计算的余数为0,也就是下次计算的b=0, // 那么循环就停止了, //恰好上一次循环的b现在在a的位置,所以现在a位置上面的值就是 //我们要求的最大公约数 return a; } //根据最大公约数求得最小公倍数 //最小公倍数就是你输入的两个值相乘再除以最大公约数 int lcm(int a, int b, int gcdValue) { return a * b / gcdValue; } //这种题最关键的就是求出最大公约数 // 再根据最大公约数求出最小公倍数 int main() { int m, n; scanf("%d %d", &m, &n); //计算最大公约数 int gcdValue = gcd(m, n); //计算最小公倍数 int lcmValue = lcm(m, n, gcdValue); //打印最大公约数和最小公倍数之和 printf("%d", gcdValue + lcmValue); return 0; } 如果给的数据特别大,就在每个int前面添加long long 并且在占位符%d前面添加ll