按照刘汝佳书上的思路来,y >= x,可以转换为y <= 2k。因为k的范围足足有10000,精度问题很严重,所以此题中绝对不能出现除法。那就只能通过通分来把除法转化为乘法 :ky / y-k 。可以预见,当k为正整数的时候符合条件即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int xans[maxn], yans[maxn];
int main()
{
int k, x, y;
while(scanf("%d",&k) != EOF){
int index = 1;
for( y = k+1; y <= 2*k; y++){
if((k*y) % (y-k) == 0){
xans[index] = (k*y) / (y-k);
yans[index] = y;
index++;
}
}
printf("%d\n",--index);
for(int i = 1; i <= index; i++)
printf("1/%d = 1/%d + 1/%d\n", k, xans[i], yans[i]);
}
return 0;
}