这个题显然要用暴力求解,但是暴力的最大数量是可以计算的,题目规定x≥y,所以y的最大值应该为k的2倍,确定范围之后对y开始枚举就可以了。
当然,这个题由于精度问题,我们还是尽量避免除法运算,首先把式子通分,可以求得x = [k * y / (y - k)], 这里要求y必须大于k,所以枚举时y的范围可以进一步缩小为[k+1, 2*k]。所以,我们可以这样想,对y进行枚举,判断
k*y%(y - k)这个式子是否为零,如果为零,说明此时算出的x为正整数,而这个x也正是符合题意的x。
#include<stdio.h>
#define maxn 1000
int main()
{ int k, x, y;
while(scanf("%d",&k) == 1){
int a[maxn], b[maxn];
int i = 0, j;
for(y = k + 1; y <= 2*k; y++)
if((k * y) % (y - k) == 0)
{ x = (k*y)/(y-k);
a[i] = x;
b[i] = y;
i++;
}
printf("%d\n",i);
for(j = 0; j < i; j++)printf("1/%d = 1/%d + 1/%d\n",k,a[j],b[j]);
}
return 0;
}