#include<stdio.h> typedef long long ll; int main(void) { ll a = 0, b = 0; scanf("%ld %ld", &a, &b); ll gcd(ll a,ll b); // //辗转相除法: 当得到余数为0时,被除数即为最大公约数 //最小公倍数*最大公约数=a*b printf("%ld",gcd(a,b)+(a*b)/gcd(a,b)); return 0; } ll gcd(ll a,ll b){//b不为0一直做取余运算,递推到传入的b为0时,返回的是a的值即为当前余数 // 严格来说小的数应该放在第二位,但使用递归时,第一次运算就会把大小数交换,不用人为交换 // eg:a=15,b=20; gcd(a,b) 按递推式有:a=20,b=a%b=15; return b?gcd(b,a%b):a;//b不为0为真时执行1 为0时执行2 };