-
Notifications
You must be signed in to change notification settings - Fork 12
/
prime_factorization.cpp
67 lines (53 loc) · 1.4 KB
/
prime_factorization.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//
// 素因数分解
//
// verified
// AOJ Course NTL_1_A Elementary Number Theory - Prime Factorize
// http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=NTL_1_A&lang=jp
//
/*
入力: n は 2 以上の整数
出力: 540 = 2^2 × 3^3 × 5 の場合、({2, 2}, {3, 3}, {5, 1})
*/
#include <iostream>
#include <vector>
#include <map>
using namespace std;
vector<pair<long long, long long> > prime_factorize(long long n) {
vector<pair<long long, long long> > res;
for (long long p = 2; p * p <= n; ++p) {
if (n % p != 0) continue;
int num = 0;
while (n % p == 0) { ++num; n /= p; }
res.push_back(make_pair(p, num));
}
if (n != 1) res.push_back(make_pair(n, 1));
return res;
}
//------------------------------//
// Examples
//------------------------------//
int main() {
int n; cin >> n;
auto res = prime_factorize(n);
cout << n << ":";
for (auto prime_beki : res) {
for (int i = 0; i < prime_beki.second; ++i) {
cout << " " << prime_beki.first;
}
}
cout << endl;
}
/*
おまけ
map 形式の出力:
540 = 2^2 × 3^3 × 5 の場合、{2: 2, 3: 3, 5: 1}
map<long long, long long> prime_factorize(long long n) {
map<long long, long long> res;
for (long long p = 2; p * p <= n; ++p) {
while (n % p == 0) { ++res[p]; n /= p; }
}
if (n != 1) res[n] = 1;
return res;
}
*/