您的位置:首页 > 其它

HDU2.1.4 Cake

2015-08-07 22:01 260 查看
直觉就是这题会有公式,然后和别人一起讨论了很久之后毫无进展

后来只好参考了一下别人博客里的想法

终于恍然大悟

就是把一个圆,在圆周上画点将其等分,想分成p等份需要画p个点

想分成q等份需要画q个点

并且如果都是从同一个起点开始画,那么会有gcd(p,q)个点是重合的

于是公式就是p+q-gcd(p,q)

代码如下:

#include <cstdio>
#include <iostream>
using namespace std;

int gcd(int a,int b)
{
if(a<b){
int temp=a;
a=b;
b=temp;
}
while(b!=0){
int t=a%b;
a=b;
b=t;
}
return a;
}

int main()
{
int p,q;
while(scanf("%d%d",&p,&q)!=EOF){
int res=p+q-gcd(p,q);
printf("%d\n",res);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: