Hướng dẫn cho Đếm số nguyên tố trên đoạn


Chỉ sử dụng khi thực sự cần thiết như một cách tôn trọng tác giả và người viết hướng dẫn này.

Chép code từ bài hướng dẫn để nộp bài là hành vi có thể dẫn đến khóa tài khoản.

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ố.



Bình luận

Không có bình luận nào.