Sàng Eratosthenes

Eratosthenes

Sàng Eratosthenes là một thuật toán cổ xưa để tìm các số nguyên tố trong một đoạn các số tự nhiên. Thuật toán này do nhà toán học cổ người Hy Lạp Eratosthenes (Ê-ra-tô-xten) phát minh ra.

Lịch sử của sàng Eratosthenes

[sửa | sửa mã nguồn]

Vào thế kỉ III TCN, ở Cyrene (Hy Lạp), nhà toán học cổ đại Eratosthenes đã phát minh một thuật toán để tìm các số nguyên tố, gọi là sàng Eratosthenes. Ban đầu, ông xếp 100 lá cọ tương ứng với 100 số tự nhiên từ 1 đến 100. Sau khi chọc thủng lá cọ số 1, ông giữ nguyên các số nguyên tố (các lá cọ chưa bị chọc thủng) và lần lượt chọc thủng các bội của chúng. Cuối cùng, thuật toán đã sàng lại những số nguyên tố và loại bỏ các số không phải số nguyên tố nên được gọi là sàng nguyên tố Eratosthenes.[1][2]

Mô tả giải thuật

[sửa | sửa mã nguồn]

Để tìm các số nguyên tố nhỏ hơn hoặc bằng số tự nhiên bằng sàng Eratosthenes, ta làm như sau:

Hình minh họa cho thấy thuật toán đơn giản để tìm số nguyên tố và các bội số
Các số tô màu giống nhau là cùng một họ mà dẫn đầu (đậm hơn) sẽ là số nguyên tố
  • Bước 1: Tạo 1 danh sách các số tự nhiên liên tiếp từ 1 đến : (1, 2, 3, 4,..., ).
  • Bước 2: Giả sử tất cả các số trong danh sách đều là số nguyên tố (ngoại trừ số 1 không là số nguyên tố). Trong đó, là số nguyên tố đầu tiên.
  • Bước 3: Tất cả các bội của số nguyên tố như sẽ bị đánh dấu vì không phải là số nguyên tố.
  • Bước 4: Tìm các số còn lại trong danh sách mà chưa bị đánh dấu và phải lớn hơn và nhỏ hơn hoặc bằng . Nếu không còn số nào, dừng tìm kiếm. Ngược lại, gán cho giá trị bằng số nguyên tố tiếp theo và quay lại bước 3.

Khi giải thuật kết thúc, tất các số chưa bị đánh dấu trong danh sách là các số nguyên tố cần tìm.

Cải tiến giải thuật:

[sửa | sửa mã nguồn]

Xét là bội của số nguyên tố .

Nếu , ta có . Suy ra  phải có một ước nguyên tố nhỏ hơn . Vì thế, các bội () đã bị sàng Eratosthenes loại bỏ trong các vòng lặp trước đó và ta chỉ cần xét .[3]

Cài đặt

[sửa | sửa mã nguồn]

Mã giả:

// Input: một số nguyên n > 1.
// Cho A là một mảng boolean, được đánh số từ 0 đến n.
// Gán tất cả phần tử trong mảng là true và gán A[0] := A[1] := false.

for i = 2, 3, 4,..., √n:
    if A[i] is true:
        for j = i2, i2+i, i2+2i,..., n:
            A[]:= false

Tham khảo

[sửa | sửa mã nguồn]
  1. ^ “sieve of Eratosthenes”. Britannica Kids (bằng tiếng Anh). Truy cập ngày 27 tháng 11 năm 2024.
  2. ^ Johnson, Ryan (21 tháng 11 năm 2023). “Sieve of Eratosthenes | History, Application & Examples”. Study.com. Đã định rõ hơn một tham số trong |tác giả=|họ= (trợ giúp)
  3. ^ “Sàng nguyên tố”. VNOI Wiki. Truy cập ngày 27 tháng 11 năm 2024.
Chúng tôi bán
Bài viết liên quan
Ngôn ngữ của trầm cảm - Language use of depressed and depression
Ngôn ngữ của trầm cảm - Language use of depressed and depression
Ngôn ngữ của người trầm cảm có gì khác so với người khỏe mạnh không?
Vật phẩm thế giới Ouroboros - Overlord
Vật phẩm thế giới Ouroboros - Overlord
Ouroboros Vật phẩm cấp độ thế giới thuộc vào nhóm 20 World Item vô cùng mãnh mẽ và quyền năng trong Yggdrasil.
JR Pass là gì? Hướng dẫn sử dụng JR Pass đi khắp nước Nhật dễ dàng
JR Pass là gì? Hướng dẫn sử dụng JR Pass đi khắp nước Nhật dễ dàng
Bạn muốn đi nhiều nơi tại Nhật nhưng chi phí đi lại thì quá cao? Hãy yên tâm, lựa chọn của bạn sẽ đơn giản hoá hơn nhiều khi đã có JR Pass là có thể di chuyển khắp mọi miền quê ở đất nước mặt trời mọc
Review phim “Hôn lễ của em”
Review phim “Hôn lễ của em”
Trai lụy tình cuối cùng lại trắng tay! Trà xanh mới là người lí trí nhất!