题目分析:数论,枚举。首先通过x>=y这个条件化简已知条件,可以得出k+1<=y<=2*k,枚举所有在区间(k+1,2k)上的y即可。当1/k - 1/y(通分)的结果分子为1即为一组解。
代码如下:
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int a[10011];
int b[10011];
int main()
{
int n;
while (scanf("%d",&n))
{
int m = 2*n,count = 0;
for (int i = n+1 ; i <= m ; ++ i)//这里用i代表变化的y:从n+1到2n
{
if (i*n % (i-n) == 0)
{
a[count] = i*n/(i-n);//一个分数的分母
b[count] = i;//另一个分母
count ++;
}
}
printf("%d\n",count);
for (int i = 0 ; i < count ; ++ i)
printf("1/%d = 1/%d + 1/%d\n",n,a[i],b[i]);
}
return 0;
}
总结:思路很明了,关键是变量的表示要明确。