Sàng nguyên tố Eratosthenes¶
Sàng Eratosthenes (The Sieve of Eratosthenes) là thuật toán cổ do nhà toán học Hy Lạp Eratosthenes, sống trong khoảng 276-194 BCE, phát triển nên, dùng để tìm ra tất cả số nguyên tố trong một phạm vi nhất định.
Cập nhật: 21.01.2024
Ý tưởng¶
Thuật toán này dựa trên cơ sở, nếu một số tự nhiên \(p\) là nguyên tố thì các bội số của \(p\) không còn là nguyên tố nữa.
Theo đó, ý tưởng chính của thuật toán là dùng vòng lặp duyệt qua các số tự nhiên và đánh dấu các bội số của \(p\).
Khởi tạo¶
Ta khởi tạo mảng prime
có n
phần tử. Sàng Eratosthenes có thể áp dụng cho giới hạn \(10^7\), nên ta gán n
là 10 triệu, hoặc 100 triệu nếu chấp nhận chạy hơn chậm một chút.
Giả sử mọi số đều là nguyên tố, ta gán giá trị True
cho tất cả phần tử.
Đánh dấu các bội số¶
Với p
là một số nguyên tố, thì 2p
, 3p
, 4p
, 5p
, ... đều là số không nguyên tố.
Do đó, ta dùng vòng lặp xuất phát từ p * p
, với bước nhảy +p
, để đánh dấu các bội số của p
là False
.
Sở dĩ xuất phát từ p * p
, chứ không phải là p + p
, vì các bội số như 2 * p
, 3 * p
, 4 * p
, 5 * p
, ... đã được xử lý trước đó khi gặp các số nguyên tố nhỏ hơn như 2, 3, 5, ...
Sau khi đánh dấu xong, các phần tử còn lại của mảng prime
mà có giá trị True
chính là các số nguyên tố.
Toàn bộ chương trình¶¶
Code đầy đủ được đặt tại GitHub.