Hướng dẫn giải của HSG THPT Hải Phòng 2021 - Bài 2


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Với mỗi giá trị ~a_i~ bất kỳ, ta sẽ kiểm tra kiểm tra xem số đó có phải là số siêu nguyên tố hay không y như yêu cầu đề bài đã cho. Riêng Subtask 3 cần phải tối ưu việc kiểm tra số nguyên tố bằng việc sử dụng sàng nguyên tố.


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    thanhdongt000  đã bình luận lúc 24, Tháng 12, 2024, 16:11

    include <bits/stdc++.h>

    using namespace std;

    vector<bool> E(10000001, true); int a[100001]; void sang() { E[0] = E[1] = false; for (int i = 2; i * i <= 10000000; i++) { if (E[i]) { for (int j = i * i; j <= 10000000; j += i) { E[j] = false; } } } } bool ktra(int n) { if (!E[n]) return false; int res = n; while (res > 0) { if (!E[res]) return false; res /= 10; } for (int i = 1; i <= 9; i++) { int k = 10 * n + i; if (k <= 10000000 && E[k]) { return true; } } return false; }

    int main() { sang(); int n; cin >> n; vector<int> ans; for (int i = 1; i <= n; i++) { cin >> a[i]; if (ktra(a[i])) { ans.push_back(i); } } sort(ans.begin(), ans.end());

    int q;
    cin >> q;
    while (q--) {
        int l, r;
        cin >> l >> r;
        int q = upper_bound(ans.begin(), ans.end(), r) - ans.begin();
        int p = lower_bound(ans.begin(), ans.end(), l) - ans.begin();
        cout << q - p << '\n';
    }
    
    return 0;
    

    } xem hộ em với ạ