Skip to main content

[Algo] Sieve of Eratosthenes

1.  Sieve of Eratosthenes
Sieve of Eratosthenes là một giải thuật tìm số nguyên tố rất phổ biến ở nước ngoài (ở VN thì tớ không biết).

Độ phức tạp: xem ở [1].

Tư tưởng của thuật toán:
Giả sử ta kiểm tra các số từ 1-100 xem có những số nào là nguyên tố.
Bắt đầu từ 2: ta lần lượt loại các bội của 2 ra khỏi danh sách (không tính 2, như vậy loại ra 4 6 8 10 ...
tiếp theo : loại các bội của 3 (6 9 12 ...)
...
cho đến hết.

Dễ dàng hiểu rằng ta đã loại đi các bội số(hợp số) và sau khi loại hết các số này thì chỉ còn lại các số nguyên tố.

Thuật toán cài đặt bằng Python2.7:


 https://github.com/hvnsweeting/FAMILUG/blob/master/Python/bulb_state.py

2. Số chính phương.


Có nét giống SoE, 1 thuật toán kiểm tra số chính phương  dựa vào tính chất đặc biệt của nó: các số chính phương có số ước không tầm thường là một số lẻ!

(mặc dù bạn hòan tòan có thể tìm số chính phương bằng cách tương tự như EoS nhưng thay vì loại các bội số của k thì ta chọn bình phương của k)

VD: 4 (2 * 2) có ước duy nhất là 2, 9 (3 * 3) có ước duy nhất là 3, 25 (5 * 5) có  ước duy nhất là 5. 25^2 có các ước là 5, 5^2, 5^3

Như vậy bài toán kiểm tra số chính phương đã chuyển thành bài toán kiểm tra xem số ước của 1 số có là lẻ không?
Thế nhưng khi ra đề, người ta có thể đắp lên phần xương bài toán những miếng thịt ngọt và ngon =p~ để che mắt thiên hạ như sau :D

Cho 100 cái bóng đèn đều đang tắt
người thứ nhất vào bật 100 bóng lên
người thứ 2 tắt các bóng 2 4 6 8 ...
người thứ 3 thay đổi trạng thái bóng 3 6 9...
người thứ 4 thay đổi trạng thái bóng 4 8 12 ...
...
người thứ 100 thay đổi trạng thái bóng thứ 100

Tìm các bóng đang bật?

Sau khi đọc đề, bạn có thể đưa ra nhận xét: 1 bóng đèn có trạng thái cuối cùng là bật nếu nó bị thay đổi trạng thái lẻ lần.

Thuật toán cài đặt bằng Python2.7:
https://github.com/hvnsweeting/FAMILUG/blob/master/Python/eratosthenes.py



[1] http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

Comments

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG