输入正整数k,找到所有的正整数x≥y,使得1/k=1/x+1/yinput:
2
12
output:
21/2 = 1/6 + 1/31/2 = 1/4 + 1/4
81/12 = 1/156 + 1/13
1/12 = 1/84 + 1/14
1/12 = 1/60 + 1/15
1/12 = 1/48 + 1/16
1/12 = 1/36 + 1/18
1/12 = 1/30 + 1/20
1/12 = 1/28 + 1/21
1/12 = 1/24 + 1/24
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
int k;
while (scanf("%d", &k) == 1 && k)
{
vector<int> X, Y;
for (int y = k + 1; y <= k * 2; y++)
{
// 1/k = 1/x + 1/y => x = ky/(y-k)
if (k*y % (y - k) == 0)
{
X.push_back(k*y / (y - k)); Y.push_back(y);
}
}
printf("%d\n", X.size());
for (int i = 0; i < X.size(); i++)
printf("1/%d = 1/%d + 1/%d\n", k, X[i], Y[i]);
}
return 0;
}
X中存储的是x的值,Y中存储y的值
y是从小到大遍历的,因此得到的x为从大到小,与输出顺序相同,因此队列输出
push_back(const TYPE val):添加值为val的元素到当前vector末尾