nyoj-66
来源:互联网 发布:windows xp sp3 纯净版 编辑:程序博客网 时间:2024/04/29 15:02
就是数学问题,边界考虑要清楚。
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;}