Phân tích N ra thừa số nguyên tố

Bài toán: Cho một số nguyên dương \(n\), hãy phân tích \(n\) ra thừa số nguyên tố

Input: Gồm một dòng duy nhất là số nguyên dương \(n \ (1 \le n \le 10^{12})\).

Output: Gồm \(m\) dòng, mỗi dòng in ra 2 số \(x, y\) cách nhau một dấu cách được sắp xếp theo thứ tự tăng dần của \(x\) với \(m\) là số lượng thừa số nguyên tố của \(n, x\) là thừa số nguyên tố của \(n\) và \(y\) là số mũ của \(x\).

Ví dụ:

input

2250

output

2 1
3 2
5 3


Ý tưởng
  • Để phân tích \(n\) ra thừa số nguyên tố ta chia \(n\) cho ước nguyên tố nhỏ nhất của \(n\) và cứ lặp lại bước đó cho đến khi \(n = 1\).
  • Ví dụ:


code
#include <bits/stdc++.h>

using namespace std;

vector<pair<long long,int>> factorize(long long n) {
    vector<pair<long long, int>> fac;
    for (long long i = 2; i*i <= n; ++i) {
        if (n % i == 0) {
            fac.emplace_back(i, 0);
            while (n % i == 0) {
                fac.back().second++;
                n /= i;
            }
        }
    }
    if (n > 1) fac.emplace_back(n, 1);
    return fac;
}

int main() {
    long long n; cin >> n;
    auto fac = factorize(n);
    for (auto f : fac) cout << f.first << ' ' << f.second << '\n';
    return 0;
}