题意:
给定正整数k(1<=k <= 10000),找出所有正整数 x>= y, 使得1/k = 1/x + 1/y.
思路:
首先,x,y肯定为整数,所以x,y的取值范围不能小于k,即左区间为k+1,因为x>=y,1/x<=1/y,即1/k-1/y<=1/y,所以,1/k<=2/y,所以2k>=y,所以y的取值范围就出来了,[k+1,2*k];
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=1e4+5;
int k;
int ans[maxn<<1][3];
int main()
{
while (scanf("%d",&k)!=EOF)
{
int cnt=0;
for (int i=k+1;i<=2*k;i++)
{
if((k*i)%(i-k)) continue;
int j=(k*i)/(i-k);
if(j>=i)
{
ans[cnt][0]=k;
ans[cnt][1]=j;
ans[cnt][2]=i;
cnt++;
}
}
printf("%d\n",cnt);
for (int i=0;i<cnt;i++)
printf("1/%d = 1/%d + 1/%d\n",ans[i][0],ans[i][1],ans[i][2]);
}
return 0;
}