数学题。
1、
因为 1/k = 1/x +1/y
所以 1/k > 1/y
那么 y > k
2 、
因为 x >= y
所以 1/k - 1/y <= 1/y
那么 y <= k
那么y的枚举范围为 k < y <= 2*k
题目还要求你先打印出方案总数那么,直接利用一个数组保存符合条件的y即可。
AC代码
#include<cstdio>
const int maxn=10000+5;
int res[maxn];
int main()
{
int k;
while(scanf("%d",&k)==1)
{
int n=2*k,cnt=0;
for(int y=k+1;y<=n;++y)
{
if((k*y)%(y-k)==0)
{
res[cnt]=y;
cnt++;
}
}
int x;
printf("%d\n",cnt);
for(int i=0;i<cnt;++i)
{
x=k*res[i]/(res[i]-k);
printf("1/%d = 1/%d + 1/%d\n",k,x,res[i]);
}
}
return 0;
}
如有不当之处欢迎指出!