1/k = 1/x + 1/y
从输出实例中可以看出 x>=y,那么 1/x <= 1/y 、1/k >= 1/y + 1/y 、1/k >= 2/y 从而得到y的范围 y<=2*k 其中y>=k+1;那么就可以在[k+1, 2*k]中枚举y的大小,来查找符合要求的x,从而得到需要的结果。
#include<iostream>
#include<cstdio>
using namespace std;
double k,x,y;int main(){while(cin>>k){int count = 0;for(int i=k+1 ;i<=2*k ;i++){y = i;x = k*y/(y-k);if((int)x==x){count++;}}cout<<count<<endl;for(int i=k+1 ;i<=2*k ;i++){y = i;x = k*y/(y-k);//符合要求 if((int)x==x){printf("1/%.0lf = 1/%.0lf + 1/%.0lf\n",k,x,y);}} }return 0;
}