HSG THPT Hải Phòng 2021 - Bài 2

Xem dạng PDF

Gửi bài giải


Điểm: 0,10
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Tác giả:
Nguồn bài:
Kỳ thi Học sinh giỏi THPT TP Hải Phòng 2021
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Số ~x~ là số siêu nguyên tố tiềm năng khi thỏa mãn đồng thời 3 điều kiện sau:

  • ~x~ là số nguyên tố;

  • Thêm vào bên phải số ~x~ một chữ số ~\in \{0,1,...,9\}~, số thu được là số nguyên tố;

  • Khi lần lượt xóa đi từng chữ số bên phải của ~x~, số thu được vẫn là số nguyên tố.

Ví dụ : Số ~x=313~ là số siêu nguyên tố tiềm năng vì:

  • ~x~ là số nguyên tố;

  • Thêm vào bên phải số ~x~ chữ số ~7~, ta thu được ~3137~ cũng là số nguyên tố;

  • Khi lần lượt xóa đi các chữ số bên phải của ~x~, ta thu được ~31;3~ là các số nguyên tố.

Cho dãy gồm ~N~ số nguyên dương ~a_1,a_2,\ldots,a_n~ và ~T~ bộ (~u,v~) (~1\le u < v \le n~). Hãy đếm số lượng số siêu nguyên tố tiềm năng trong đoạn ~a_u,a_{u+1},\ldots,a_v~.

Input

Dữ liệu vào gồm:

Dòng 1: Chứa số nguyên dương ~N~;

Dòng 2: Chứa ~N~ số nguyên dương ~a_1,a_2,\ldots,a_n~;

Dòng 3: Chứa số nguyên dương ~T~ là số lượng câu hỏi;

~T~ dòng tiếp theo, dòng thứ ~i~ chứa 2 số nguyên dương (~u,v~) (~1\le u < v \le n~) ứng với câu hỏi thứ ~i~ là trong đoạn ~a_u,a_{u+1},\ldots,a_v~ có bao nhiêu số siêu nguyên tố tiềm năng.

Output

Ghi ra trên ~T~ dòng, dòng thứ ~i~ là đáp án câu hỏi ~i~ trong file dữ liệu vào.

Scoring

Subtask Điểm Giới hạn
1 ~25\%~ ~T = 1, N \le 100,a_i \le 10^3~
2 ~35\%~ ~T \le 10, 101 \le N \le 10^3,a_i \le 10^8~
3 ~40\%~ ~T \le 10^5, 10^3 + 1 \le N \le 10^5,a_i \le 10^6~

Sample Input 1

6
59 12 57 53 23 313 
3
1 3
2 5
3 6

Sample Output 1

1
1
2

Notes

Các số siêu nguyên tố tiềm năng trong dãy ban đầu là: ~59~,~23~,~313~.

Với câu hỏi 1, đoạn ~a_1,a_2,a_3~ có 1 số siêu nguyên tố tiềm năng là ~a_1=59~.


Bình luận

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



  • 0
    pdinhvinh815  đã bình luận lúc 12, Tháng 1, 2026, 7:49 sửa 5

    prefix


  • 0
    pdinhvinh815  đã bình luận lúc 12, Tháng 1, 2026, 6:23

    ko cần sàng mà vẫn AC ?:))


  • 0
    vominhmanh10  đã bình luận lúc 14, Tháng 12, 2025, 4:56 chỉnh sửa

    sàng sử dụng bitset

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    #define ham_nhanh inline __attribute__((always_inline))
    #define IO ios::sync_with_stdio(0); cin.tie(nullptr)
    const ll maxn = 2e6 + 5, inf = 1e18;
    ll n, q, p[maxn];
    bitset< 10 * maxn> primes;
    vector<ll> a;
    void sieve() {
        primes.set();
        primes[0] = primes[1] = 0;
        int k = sqrt(10 * maxn);
        for (int i = 4; i < 10 * maxn; i += 2) primes[i] = 0;
        for (int i = 3; i <= k; i += 2) if (primes.test(i)) for (int j = i * i; j < 10 * maxn; j += i) primes[j] = 0;
    }
    ham_nhanh bool check(ll x) {
        if (x < 2 || 10 * x + 9 >= 10 * maxn) return 0;
        if (!primes.test(x)) return 0;
        bool ok = 0;
        for (int i = 1; i < 10; i += 2) if (primes.test(10 * x + i)) {
            ok = 1;
            break;
        }
        if (!ok) return 0;
        while (x > 0) {
            if (!primes.test(x)) return 0;
            x /= 10;
        }
        return 1;
    }
    int main() {
        IO;
        cin >> n; a.resize(n);
        for (ll &x : a) cin >> x;
        cin >> q;
        sieve();
        for (int i = 1; i <= n; ++i) {
            if (check(a[i - 1])) p[i] = p[i - 1] + 1;
            else p[i] = p[i - 1];
        }
        while (q--) {
            int l, r; cin >> l >> r;
            cout << p[r] - p[l - 1] << "\n";
        }
    }
    

    • 0
      minhkhangvophuoc  đã bình luận lúc 2, Tháng 1, 2026, 15:46

      Cho em hỏi là #define ham_nhanh inline __attribute__((always_inline)) đi thi được dùng 0 ạ? Em cảm ơn ạ


    • 0
      minhkhangvophuoc  đã bình luận lúc 2, Tháng 1, 2026, 15:46

      Cho em hỏi là #define ham_nhanh inline __attribute__((always_inline)) đi thi được dùng 0 ạ? Em cảm ơn ạ


  • 0
    quangnhat123  đã bình luận lúc 30, Tháng 11, 2025, 13:15

    https://ideone.com/jaU0JO mọi người đánh giá code này của em cần thêm gì để tối ưu ạ


  • 0
    tombach1102  đã bình luận lúc 3, Tháng 9, 2025, 17:04

    Bài này dùng sàng mà bị quá bộ nhớ thì phải làm sao ạ?


    • 1
      angwangsushi  đã bình luận lúc 7, Tháng 10, 2025, 13:36 chỉnh sửa

      Vậy thì b đừng sàng nữa, thử nghĩ cách khác xem sao?

      Hint

      Bạn có thể sử dụng prefixSum, và hàm bool kiểm tra số nguyên tố như thông thường.


  • 0
    tathaolqd  đã bình luận lúc 20, Tháng 2, 2025, 15:58

    tổng tiền tố


  • 1
    vlthhiep08  đã bình luận lúc 10, Tháng 2, 2025, 2:27

    Sub 3 để 1e6 nhưng phải 8e6 mới AC ?


    • 1
      lhoangminh126  đã bình luận lúc 13, Tháng 5, 2025, 11:05

      Sub3 nhưng bị dính 1e8 từ sub2 á


  • -19
    quannmq2009  đã bình luận lúc 12, Tháng 12, 2024, 16:28

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


  • 0
    TriHuongBG  đã bình luận lúc 1, Tháng 8, 2024, 10:35

    oh me


  • 7
    melondepchai  đã bình luận lúc 23, Tháng 6, 2024, 12:38

    fact: bài này khỏi sàng vẫn ổn :D


  • -16
    huypro  đã bình luận lúc 26, Tháng 2, 2024, 12:17

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


  • -29
    ChulgCyel  đã bình luận lúc 24, Tháng 2, 2024, 8:23

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


    • 0
      manhvuvanyeuha  đã bình luận lúc 25, Tháng 2, 2024, 14:34

      code này sao ac nổi


  • 0
    phamvuhoang486  đã bình luận lúc 27, Tháng 1, 2024, 14:03 chỉnh sửa

    Các bạn có thể chia subtask ra làm cũng AC được nha


  • 2
    thanhhoang  đã bình luận lúc 23, Tháng 1, 2024, 18:51

    Sàng nguyên tố.


  • -18
    themluachon2008  đã bình luận lúc 23, Tháng 1, 2024, 7:47 chỉnh sửa

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