题目大意:给定k,要你输出满足1/k=1/x+1/y的所有情况。

思路:
根据 x>=y
-> 1/x>=1/y
-> 1/x+1/y>=1/y+1/y
-> 1/k>=2/y
-> y<=2k
确定了y的取值范围就可以枚举y了,从[k+1,2k],那么为什么是从k+1开始因为如果k=y显然只有x=0才成立,而分母不可能为0,k<y,则1/y>1/k显然不可能。所以只能取值[k+1,2k].
在确定了k,y后,因为知道了公式的两个变量就可以直接化简公式求出x,而不必要枚举x了。
1/k=1/x+1/y
-> 1/k-1/y=1/x
-> y-k/y*k=1/x
-> x=y * k/y-k
只有x为整数才满足等式,当x不为整数即分数,要倒过来才满足等式,这种情况全部舍弃。
代码:

#include<bits/stdc++.h>
using namespace std;

const int maxn=1e3+10;
struct node{
	int x,y;
};
node a[maxn];
int main(){
	int k;
	while(scanf("%d",&k)!=EOF){
		memset(a,0,sizeof(a));
		int cnt=0;
		for(int y=k+1;y<=2*k;y++){
			int x=(k*y)/(y-k); 
			if((k*y)%(y-k)==0){
				a[cnt].x=x;a[cnt++]. y=y;
			}
		}
		cout<<cnt<<endl;
		for(int i=0;i<cnt;i++)
	    cout<<"1/"<<k<<" = "<<"1/"<<a[i].x<<" + "<<"1/"<<a[i].y<<endl;
	}
}