您的位置:首页 > 大数据 > 人工智能

Uva - 10976 - Fractions Again?!

2015-06-17 22:08 435 查看
It is easy to see that for every fraction in the form

(k > 0), we can
always find two positive integers x and y, xy, such that:


.
Now our question is: can you write a program that counts how many such pairs of x andy there are for any given k?

Input

Input contains no more than 100 lines, each giving a value of k (0 < k ≤ 10000).

Output

For each k, output the number of corresponding (x, y) pairs, followed by a sorted list of the values of x and y,
as shown in the sample output.

Sample Input

2
12


Sample Output

2
1/2 = 1/6 + 1/3
1/2 = 1/4 + 1/4
8
1/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


遍历y,y的取值是从k+1到2k,每次判断 y * k % (y - k)是否是0,就是判断k之分一减去y分之一能否约分成分子为1的分数,结果用队列存放。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <bitset>
#include <cassert>

using namespace std;

queue<pair<int, int> > ans;

int main()
{
int k;
while (cin >> k && k) {
int cnt = 0;
for (int i = k + 1; i <= 2 * k; i++) {
long long pro = (long long)i * k;
int minus = i - k;
if (pro % minus == 0) { // 是否能约分成分子是1的分数
ans.push(pair<int, int>(pro / minus, i));
cnt++;
}
}
printf("%d\n", cnt);
for (int i = 0; i < cnt; i++) {
printf("1/%d = 1/%d + 1/%d\n", k, ans.front().first, ans.front().second);
ans.pop(); // 全部输入就刚好清空了
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: