您的位置:首页 > 其它

uva10976—分数拆分

2016-05-27 17:10 309 查看
题意:

输入一个正整数k,找到所有的正整数 x >= y,使得1 / k = 1 / x + 1/ y 。

Input:

2

12

output:

2

1/2 = 1/6 + 1/3

1/2 = 1/4 + 1/4

8

1/12 = 1/156 + 1/13

1/12 = 1/84 + 1/14

1/12 = 1/60 + 1/15

1/12 = 1/48 + 1/16

1/12 = 1/36 + 1/18

1/12 = 1/30 + 1/20

1/12 = 1/28 + 1/21

1/12 = 1/24 + 1/24

分析: 

     这是一个穷举题,所以首先要找到界限,我们不妨来看y的范围,由于1 / k = 1 / x + 1/ y; y的范围就确定了,是从k+1到2k,所以

可以根据上式,用y来表示x,x=(k * y) / (y - k),最后利用 x >= y ,穷举所有符合题意的式子就可以了。

代码:#include <bits/stdc++.h>
using namespace std;

int k,x,y;
int num;
int main()
{
while(~scanf("%d",&k)&&k)
{
num=0;
for(int y=k+1; y<=2*k; y++)
{
if((k*y)%(y-k)==0)
{
int t=(k*y)/(y-k);
if(t>=y)
num++;
}
}
cout <<num<<endl;
for(int y=k+1; y<=2*k; y++)
{
if((k*y)%(y-k)==0)
{
int t=(k*y)/(y-k);
if(t>=y)
printf("1/%d = 1/%d + 1/%d\n",k,t,y);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: