SÀNG NGUYÊN T CI TIN VÀ NG DNG
1. Tóm tt:
S hc hay còn gi lí thuyết s là mt trong nhng ngành toán hc c nht ca nhân loi.
Theo thời gian đã có nhiều thut toán v s được đề xut giúp gii quyết các vấn đề v s học như
kim tra s nguyên tố, tìm ước chung ln nhất, mã hóa…Đây được xem là nhng thành tu to ln
ca nhân loi vi s góp mt ca các nhà toán học vĩ đại như: Euclid, Euler, Fermat…
Trong bồi dưỡng hc sinh gii Tin hc, s hc gi vai trò rt quan trng, kiến thc nn
tng không th thiếu cho các em. Đặc bit trong s hc, s xut hin ca nhiu loi s khác nhau
có nhng tính chất đặc biệt như Fibonacci, Catalan, S hoàn ho, S nguyên tố… luôn chứa đựng
các bí n bên trong qui lut ca nó. Ta th tìm hiu một vài điều thú v v s nguyên t.
Như ta đã biết, mi s t nhiên lớn hơn 1 đu có th phân tích thành tích các s nguyên t.
Điu này cho thy t các s nguyên t, ta th xây dng nên toàn b các s t nhiên. Bên cnh
đó, số nguyên t chính là yếu t quyết định trong h mã hóa công khai RSA được s dng rng ri
ngày nay. S 113 ca lc ng cảnh sát cơ động cũng là số nguyên tố…
Trong mt s bài toán, ta rt hay gp các yêu cu cn phải xác định được các s nguyên t
trong mt gii hạn nào đó như: Liệt các s nguyên t, tính tng các s nguyên t …. Với các
thut toán kim tra s nguyên t theo định nghĩa ta không đủ thời gian để xkhi khong d liu
quá ln. thế, mt nhóm thuật toán đã ra đời, giúp ta lit danh sách các s nguyên t trong
đoạn [1, N] bng cách kim tra kh năng nguyên tố ca các s nguyên trong đoạn. Nhóm thut
toán này là các Sàng s nguyên t.
Trong khuôn kh chuyên đề, tôi xin trình bày các thut toán v sàng s nguyên t như:
Eratosthenes, Atkin Sundaram. Tôi cũng tiến hành so sánh hiệu năng của các thut toán vi
nhau. Tiếp đến tôi s thc hin ci tiến thuật toán sàng Atkin, sàng Eratosthenes đ mang li hiu
suất cao hơn nhưng vẫn d cài đặt. Cui cùng s là mt s các bài toán minh ha theo các mức độ
khác nhau.
Chuyên đề hướng đến đối tượng là hc sinh lớp 10. Do đó hướng đến các cách ci tiến
cài đặt không quá phc tạp để các em tiếp thu tt. Gii hạn chuyên đề đạt được N = 108. Các
cách cài đặt tối ưu hơn nhưng phức tạp hơn để đạt được N = 109, 1010 s được gii thiu đến trong
phn kết lun. Thầy cô đồng nghip và các bn quan tâm có th tìm hiu thêm.
Cách thc trin khai ging dy:
1. Ta nhc lại định nghĩa số nguyên t và bài toán cn xét. Gii thiu thut toán vét cn và
ch ra nhược điểm ca nó.
2. Ging dy cho hc sinh kiến thc v tng loi sàng s nguyên t. So sánh hiệu năng ca
chúng. Cho học sinh cài đặt nhun nhuyn các thut toán sàng s nguyên t cn thiết.
3. Ci tiến thut toán Sàng Eratosthenes theo mt s cách đơn giản, d cài đặt.
4. Cho bài tp áp dng theo tng mức độ ch yếu dùng sàng Eratosthenes để minh ha:
- Mc Cơ bản (Bài 1, 2, 3): ch áp dng sàng s nguyên t thông thường có biến đổi để gii
quyết các bài toán thường gp.
- Mc khá (Bài 4, 5): các bài toán bt buc phi áp dng thut toán ci tiến để x lý, có kết
hp các yếu t khác: tính tng, x lý xâu…
- Mc Khó (Bài 6): Bt buc phi áp dng thut toán ci tiến để h trợ. Nhưng phải có
thuật toán thông minh để gii quyết vấn đề.
5. Tng kết và nêu hướng phát trin cho hc sinh. Các em s được hc giai đoạn sau.
Thy/Cô có th ti Test, Code mu theo link sau: http://bit.ly/2KcuxG4
2. Ni dung
2.1 Định nghĩa số nguyên t:
S t nhiên N > 1, được gi là s nguyên t nếu N ch có đúng hai ước là 1 và chính nó.
Ví d: S 11 là s nguyên t do ch có 2 ước là 1 và 11. S 9 không phi là s nguyên t do
có 3 ước là 1, 3, 9.
2.2 Bài toán
Nhn thy Tom là mt hc sinh xut sc và b hp dn rt nhiu v s nguyên t, Thy giáo
li quyết định cho Tom mt th thách tiếp theo tìm tng ca N s nguyên t đầu tiên. Do gii
hn khá lớn nên Tom hơi bị lúng túng. Em hãy giúp anh y tìm cách gii bài toán này tht nhanh.
Input: file SUMNT.INP
Dòng đầu tiên cha s ng các test T
T dòng tiếp theo, mỗi dòng chưa số nguyên dương M
Output: file SUMNT.OUT
Xut ra T s nm trên T dòng tr li cho T test trên.
Ràng buc:
1<= T <= 80
1<= N <=106
Ví d:
SUMNT.INP
SUMNT.OUT
2
6
16
41
160
Chú ý: S nguyên t có th lên đến 108
Gii thích
Ta có T = 2
Khi N = 6, tng các s nguyên t là = 2+3+5+7+11+13= 28
Khi N = 11, tng các s nguyên t là = 2+3+5+7+11+13+17+19+23+29+31= 160
Để gii quyết bài toán trên ta cn phi liệt kê được danh sách các s nguyên t t đó tính tổng
N s nguyên t đầu tiên.
Sau đây là 1 số thuật toán đánh dấu và đếm các s nguyên t trong đoạn [1..N]
2.2. Thut toán Vét cn (Brute Forces)
Đây thuật toán s dng k thut vét hết tt c các s l kim tra tính nguyên t ca
nó theo định nghĩa.
Code C++
#include <bits/stdc++.h>
using namespace std;
void Bruce_forces(long limit)
{
long count = 1;
bool isPrime = true;
for (long i = 3; i <= limit; i += 2)
{
for (long j = 3; j * j <= i; j += 2)
{
if ((i % j) == 0) { isPrime = false; break; }
}
if (isPrime) { count++; }
else isPrime = true;
}
cout<<count<<endl;
}
int main()
{
long limit = 10000000;
Bruce_forces(limit);
return 0;
}
Độ phc tp: O((n𝒏)/4)
2.2. Sàng Eratosthenes
Eratosthenes Cyrene (c Hy Lp: 276 195 TCN) Nhà toán học, địa , nhà thơ, vận
động viên, nhà thiên văn học, sáng tác nhc, nhà triết hc. Eratosthenes người đầu tiên tính ra
chu vi trái đt khong cách t Trái đất ti Mt tri với độ chính xác ngc nhiên bằng phương
pháp đơn giản nhất là đo bóng Mt Tri tại hai địa điểm khác nhau trên Trái Đất.
Sàng Eratosthenes hoạt động theo tưởng loi b dn bi s ca các s nguyên t tha
mt gii hn nhất định. Khi kết thúc thut toán, các s chưa bị loi b chính các s nguyên t
cn tìm.
Ta th lit mi s nguyên t không quá 109 bng sàng Eratosthenes, tuy nhiên ch
hiu qu khi N<=107
Chi tiết thut toán [4]:
c 1: To 1 danh sách các s t nhiên liên tiếp t 2 đến n: (2, 3, 4,..., n).
c 2: Gi s tt c các s trong danh sách đều là s nguyên tố. Trong đó, p = 2 là số nguyên t
đầu tiên.
c 3: Tt c các bi s ca p: 2p, 3p, 4p,... s b đánh dấu vì không phi là s nguyên t.
c 4: Tìm các s còn lại trong danh sách chưa bị đánh dấu và phi lớn hơn p. Nếu không
còn s nào, dng tìm kiếm. Ngược li, gán cho p giá tr bng s nguyên t tiếp theo
quay lại bước 3.
Khi gii thut kết thúc, tt c c s chưa bị đánh dấu trong danh sách các s nguyên t
cn tìm.