#include <stdio.h> // long long get_max_y(long long n, long long m, long long max) // { // return n % max == 0 && m % max == 0 ? max : get_max_y(n, m, max - 1); // } //第一次写的 取两个数最小值当作最大公约数,如果不是的话一个一个减,提交结果就是如果数值太大超出时间限制 long long gcd(long long n,long long m){ return m==0? n:gcd(m,n%m) ; } //第二次写的 用的辗转相除法,也叫欧几里得算法: //设两数为a和b(a>b),用a除以b,得a÷b=q......r,若r=0 ,则最大公约数为b;若r≠0 ,则再用b÷r,得b÷r=q......r',若r'=0,则最大公约数为r',若r'≠0,则继续用r÷r'......直到能够整除为止,此时的除数即为最大公约数。 int main() { long long n, m; long long min_b, max_y; scanf("%lld %lld", &n, &m); // long long max = m > n ? n : m; // max_y = get_max_y(n, m, max);第一次写的 max_y = gcd(n, m); min_b = m * n / max_y; printf("%lld",max_y+min_b); return 0; }