nyoj-66

就是数学问题,边界考虑要清楚。

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;
}

  

你可能感兴趣的:(nyoj-66)