UVA - 10976 分数拆分(暴力的枚举范围
题目描述
现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y.
输入
第一行输入一个整数n,代表有n组测试数据。
接下来n行每行输入一个正整数k
输出
按顺序输出对应每行的k找到所有满足条件1/k=1/x+1/y的组合
思路:找出所有x,y,所以要枚举x,y。、
但是没有x,y的范围啊,又不能一直枚举下去的
依据题目给的几组数据关系 1/x<=1/y, 1/k=1/x+1/y
故1/K-1/Y<=I/Y即y<=2k
又x=a*y/(y-k)
只需在k~2k之间枚举y计算x即可
#include<cstdio> using namespace std; int main(){ int a,y,an[1000],bn[1000]; while(scanf("%d",&a)!=EOF){ int cnt=0; for(y=a+1;y<=2*a;y++) if(a*y%(y-a)==0){ an[cnt]=a*y/(y-a); bn[cnt++]=y; } printf("%d\n",cnt); for(int i=0;i<cnt;i++) printf("1/%d = 1/%d + 1/%d\n",a,an[i],bn[i]); } return 0; }