一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食.
|
Input
每行有两个数p和q.
|
Output
输出最少要将蛋糕切成多少块. |
Sample Input
2 3 |
Sample Output
4 |
虽然是数论水题,但是直到看了一下解题报告才得到正解。
min=p+q-gcd(p,q);
将一个蛋糕分成q份,然后合起来,再分成p份,此时一共有p+q份,此时,无论是p人,还是q人来,一定都满足,但实际上多分了gcd(p,q)份,因为无论是分成p,还是q份,都需要先分成gcd(p,q)份,分成gcd(p,q)份做了两次,实际上,只做一次就行,因此要减去gcd(p,q)即可。
#include<iostream>
using namespace std;
int gcd(int a,int b){
if(a==0) return b;
return gcd(b%a,a);
}
void fact(int a,int b){
cout<<a+b-gcd(a,b)<<endl;
}
int main(){
int a,b;
while(cin>>a>>b){
if(a>b) fact(b,a);
else fact(a,b);
}
return 0;
}