就是数学问题,边界考虑要清楚。
x,y肯定大于k.即从k+1开始寻找
x>=y. 1/k=1/x+1/y<=2/y,即y<=2*k;
x=(k*y)/(y-k) 分子y-k肯定大于等于1的,(k*y)/x=y-k>=1,即x<=k*y
分析完毕。
#include<iostream> #include<cstdio> using namespace std; int main() { int n; cin>>n; while(n--) { int k,x,y; cin>>k; for(y=k+1;y<=2*k;y++) for(x=k+1;x<=k*y;x++) if((x*y)%(x+y)==0 && (x*y)/(x+y)==k) printf("1/%d=1/%d+1/%d\n",k,x,y); } return 0; }