Post

Bài 2. Số nguyên tố bị thiếu (MISSINGPRIME)

Bài 2. Số nguyên tố bị thiếu (MISSINGPRIME)

Linear sieve

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const int limN = 1e6 + 5;
int lp[limN]; // lp[i] = ước nguyên tố nhỏ nhất của i
vector<int> primes;

//lp[i] == 0 => i là nguyên tố => số nguyên tố bé nhất trong phân tích của i nó là i
//lp[i] != 0 => i là hợp số

void linear_sieve() {
    for(int i = 2; i <= limN; i++) {
        if(!lp[i]) { // khi gặp số nguyên tố mới
            lp[i] = i; // ước nguyên tố nhỏ nhất của i chính là i
            primes.pb(i); // thêm i vào danh sách số nguyên tố
        }
        for(int j = 0; j < sz(primes) && i * primes[j] <= limN; j++) { // generate ra các hợp số tạo bởi các số nguyên tố bé hơn pr[i]
            lp[i * primes[j]] = primes[j];
            if(primes[j] == lp[i]) break;
        }
    }
}

Mã giải (C++)

This post is licensed under CC BY 4.0 by the author.