题意:
输入一个正整数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;
}