Description
一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食.
Input
每行有两个数p和q.
Output
输出最少要将蛋糕切成多少块.
Sample Input2 3Sample Output
4Hint
将蛋糕切成大小分别为1/3,1/3,1/6,1/6的四块即满足要求. 当2个人来时,每人可以吃1/3+1/6=1/2 , 1/2块。 当3个人来时,每人可以吃1/6+1/6=1/3 , 1/3, 1/3块。
题解:
对样例输入结合提示进行分析,一块蛋糕两个人平均分,可看做两刀切成两份(如图第一个圆的1,2两刀),同理三个人平均分可看做三刀平均分成三份,由此可以以此类推-->几个人平均分就切几刀分几份。不过要求的是最少分几份就都能满足平均分,这里把前两个蛋糕按边数重合最多的情况合并在一起有几条边结果就是几块。所以能推导出min=p+q-gcd(p,q)(两块蛋糕边数之和减去最大边数重合数也就是最大公约数)
代码实现
#include<iostream>
using namespace std;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int p,q;
while(cin>>p>>q)
{
cout<<p+q-gcd(p,q)<<endl;
}
return 0;
}