输入正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y;
将分数和小数转化为整数运算
分析可以得到y的取值范围在k<y<=2k,枚举y来求出所有的x的值,由于有的x的值不符合题意,将分数转化为整数进行求解x的值,当x的值和其求整之后的值相等的时候那么这个x的值是符合题意的,由于还需要输出所有解的个数所以将符合题意的解保存在数组中最后进行输出。所以只需要在这个范围内进行枚举即可
#include <cstdio>
#include <cstring>
const int maxn = 10000;
int main()
{
int k;
scanf("%d", &k);
int count = 0;
int temp = 0;
int a[maxn], b[maxn];
int i = 0, j = 0;
for(int y = k+1; y <= 2*k; y++)
{
double x = k*y*1.0/(y - k); //注意小数和整数
temp = x;
if(x == temp && x > 0)
{
a[i++] = temp;
b[j++] = y;
count++;
}
}
i = 0;
printf("%d\n", count);
while(i < count)
{
printf("1/%d = 1/%d + 1/%d\n", k, a[i], b[i]);
i++;
}
return 0;
}