Cake |
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 3137 Accepted Submission(s): 1520 |
Problem Description
一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食.
|
Input
每行有两个数p和q.
|
Output
输出最少要将蛋糕切成多少块. |
Sample Input
2 3 |
Sample Output
4 |
Author
LL
|
Source
HZIEE 2007 Programming Contest
|
Recommend
lcy
|
#include<iostream>
using namespace std;
int gcd(int v1,int v2)
{
if(v1%v2==0)
return v2;
else return gcd(v2,v1%v2);
}
int main()
{
int n1,n2;
while(cin>>n1>>n2)
{
cout<<n1+n2-gcd(n1,n2)<<endl;
}
return 0;
}
举个例子:4 6,用一个矩形来切割,其实应该是圆的。这里边界也得加上,因为首位其实是相连的。。。自己动手画下圆形的蛋糕模拟。
蓝色点线表示4等分线 红色实线表示6等分线,让蛋糕(矩形)可以平分为4份需要(4刀)和6份需要(6刀),总共需要10刀,但因为其中有两条线是重合的,没有必要切两次,所以应该减掉这两刀,就只剩下10-2=8刀了。对于任何p和q,他们重合的线的数量就是他们的公约数。
所以公式就是:p+q-gcd(p,q)
参考博文: HDU-1722 Cake