题解 | #小乐乐与欧几里得#
小乐乐与欧几里得
https://www.nowcoder.com/practice/da13e0cf321e4df9acd0fdf0a433cbb0
#include <stdio.h> //欧几里得算法求的最大公约数 long long int gcd(long long int a, long long int b) { //一定要确保a>b if (a < b) { long long int temp = a; a = b; b = temp;//作用是创建临时变量将a和b的数值置换 } while (b != 0)//当b不等于0时,继续执行循环 { long long 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; } //根据最大公约数求得最小公倍数 //最小公倍数就是你输入的两个值相乘再除以最大公约数 long long int lcm(long long int a, long long int b, long long int gcdValue) { return a * b / gcdValue; } //这种题最关键的就是求出最大公约数 // 再根据最大公约数求出最小公倍数 int main() { long long int m, n; scanf("%lld %lld", &m, &n); //计算最大公约数 long long int gcdValue = gcd(m, n); //计算最小公倍数 long long int lcmValue = lcm(m, n, gcdValue); //打印最大公约数和最小公倍数之和 printf("%lld", gcdValue + lcmValue); return 0; }