只需要枚举y,即可得到x,关键知道枚举y的范围,因为x>=y, 所以1/x<=1/y,所以1/k-1/y<=1/y;所以1/k<=2/y; 所以y<=2*k.~~
代码如下:
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cstdio>
#include <climits>
#include <cmath>
using namespace std;
struct node{
double x;
double y;
}data[10005];
int main(){
#ifdef DID
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
#endif
double k;
while(scanf("%lf",&k)!=EOF){
int z=0;
memset(data,0,sizeof(data));
int case_num=0;
double x,y=k+1;
for(double i=y;i<=2*k;i++){
x=(i*k)/(i-k);
if(x-(int)x==0){
case_num++;
data[z].x=x;
data[z++].y=i;
/* cout<<x<<" "<<i<<endl;*/
}
}
printf("%d\n",case_num);
for(int i=0;i<z;i++)
printf("1/%.0lf = 1/%.0lf + 1/%.0lf\n",k,data[i].x,data[i].y);
}
return 0;
}