思路:最大公约数 + 数学公式
具体做法:p+q-gcd(p,q)
至于为什么gcd(p,q)是两种切法的公共部分:可以这么考虑,k=gcd(p,q),1/k可以整除1/p和1/q,即将蛋糕切成k份,无论是切p份还是切q份都可以满足要求,切痕重合。
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int m,int n)
{
if(m%n==0) return n;
else
gcd(n,m%n);
}
int lcm(int m,int n)
{
return m/gcd(m,n)*n;
}
int main()
{
int a,b,p,q,num;
while(cin>>p>>q)
{
a = min(p,q);
b = p+q-a;
num = lcm(a,b)/b*(b-a) +a;
cout << num << endl;
}//cout << "Hello world!" << endl;
return 0;
}