Editorial for Đếm số nguyên tố trên đoạn


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Sàng Eratosthenes trên đoạn
Đôi khi bạn phải tìm tất cả các số không phải trên đoạn [1;N] mà là trên đoạn [L;R] với R lớn.

Điều kiện sử dụng phương pháp này là bạn có thể tạo mảng độ dài R−L+1 phần tử.

Cài đặt:

vector<bool> isPrime(R - L + 1, true); // x là số nguyên tố khi và chỉ khi isPrime[x - l] == true

for (long long i = 2; i * i <= R; ++i)
{
for (long long j = max(i * i, (L + i - 1) / i * i); j <= R; j += i)
{
isPrime[j - L] = false;
}
}

if (1 >= L) { // Xét riêng trường hợp số 1
isPrime[1 - L] = false; }

for (long long x = L; x <= R; ++x) {
if (isPrime[x - L]) {
// i là số nguyên tố
}
}
Độ phức tạp của thuật toán là O(√R∗k) với k là hằng số.



Comments

There are no comments at the moment.