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

Xem dạng PDF

Gửi bài giải


Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift

Cho số nguyên dương ~n~. Hãy phân tích ~n~ ra thừa số nguyên tố. Tức là tìm các số nguyên tố ~p_1, p_2, …, p_k~ đôi một phân biệt và các số nguyên dương ~α_1, α_2, …, α_k~ sao cho:$$n = {p_1}^{{\alpha _1}} \times {p_2}^{{\alpha _2}} \times ... \times {p_k}^{{\alpha _k}}$$

Input

  • Gồm một dòng duy nhất chứa số nguyên dương ~n~.

Giới hạn:

  • ~1 ≤ n ≤ 10^{12}~.

Output

  • Dòng đầu ghi số nguyên dương ~k~
  • ~k~ dòng sau, dòng thứ ~i~ ghi hai số ~p_i~ và ~α_i~ cách nhau một dấu cách, các số ~p_i~ được sắp xếp tăng dần.

Sample

Input #1
10
Output #1
2
2 1
5 1
Input #2
12
Output #2
2
2 2
3 1

Hint

  • ~10 = 2^1 × 5^1~
  • ~12 = 2^2 × 3^1~

Problem source: Chuyên Sơn La Online Judge


Bình luận

Please read the guidelines before commenting.



  • 0
    NgoDinhCan  đã bình luận lúc 26, Tháng 2, 2026, 13:37

    Test 6,8,9 là gì vậy mọi người


  • -1
    nhankiettvt  đã bình luận lúc 22, Tháng 2, 2026, 1:59 chỉnh sửa

    FULL AC CHO AE THAM KHẢO=))

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    using ull = unsigned long long;
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        ull n;
        cin >> n;
        vector&lt;pair&lt;int, int>> save;
        for (int i = 2; i * i <= n; i++)
        {
            if (n % i == 0)
            {
                int dem = 0;
                while (n % i == 0)
                {
                    n /= i;
                    dem++;
                }
                save.push_back({i, dem});
            }
        }
        if (n != 1)
            save.push_back({n, 1});
        cout << save.size() << "\n";
        for (auto i : save)
        {
            cout << i.first << ' ' << i.second << '\n';
        }
        return 0;
    }
    

  • 0
    Gain2006  đã bình luận lúc 22, Tháng 12, 2025, 3:54

    Mọi người cho em xin test 1,3,10 với ạ


  • -1
    annoeye  đã bình luận lúc 8, Tháng 4, 2025, 2:59

    Lưu ý trước khi xem. Code tối ưu ngắn gọn bằng java


  • -1
    rank  đã bình luận lúc 18, Tháng 12, 2024, 13:20

    vector<pair> v; for(int i=2; i<=sqrt(n); i++) { int dem=0; while(n%i==0) { dem++; n/=i; } if(dem>0) { v.pushback({i,dem}); } } if(n>1) { v.pushback({n,1}); } cout<<v.size()<<endl; for(auto x:v) cout<<x.first<<" "<<x.second<<endl;</pair>


  • -1
    MEOWMEOW  đã bình luận lúc 9, Tháng 10, 2024, 14:32

    test 7 la gi vay moi nguoi


    • 0
      duong0000  đã bình luận lúc 12, Tháng 9, 2025, 6:08

      n = 1


  • -1
    Aothatday  đã bình luận lúc 17, Tháng 1, 2024, 14:39

    code tham khảo đây :v https://www.ideone.com/koknvZ


  • -5
    vdtue  đã bình luận lúc 13, Tháng 9, 2023, 13:38

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.