Số nguyên tố¶
Khái quát¶
Số nguyên tố là số tự nhiên lớn hơn 1, chỉ chia hết cho 1 và chính nó.
Ví dụ:
2, 3, 5, 7, 11 và 13 là các số nguyên tố.
Số nguyên tố đóng vai trò quan trọng trong nhiều lĩnh vực của toán học và tin học, đặc biệt là mật mã học và bảo mật thông tin, chẳng hạn như: mã hoá RSA, giao thức trao đổi khoá Diffie-Hellman, hàm hash.
Chương trình kiểm tra số nguyên tố¶
Hàm isPrime()
dùng để kiểm tra một số tự nhiên n
có phải là nguyên tố hay không.
Ý tưởng chính là xét các trường hợp:
- Trường hợp 1: Nếu
n
là số âm hoặc 0 hoặc 1 thì không phải nguyên tố. - Trường hợp 2: Nếu
n
là 2 hoặc 3 thì là nguyên tố. - Trường hợp 3: Nếu
n
chia hết cho 2 hoặc chia hết cho 3 thì không là nguyên tố. -
Trường hợp 4: Với các số
n
còn lại, ta không cần kiểm tra chia choi
= 2..n - 1
, mà chỉ cần kiểm tra từ 5 và 7, và tăngi
lên 6 trong mỗi lần lặp.Nói cách khác, chỉ kiểm tra xem
n
có chia hết choi
= 5, 7, 11, 13, 17, 19, v.v... Bởi vì các số nằm giữa những số trên đã thuộc về ba trường hợp đã xét.Ngoài ra, ta cũng không chia
i
đếnn - 1
, mà chỉ chia đến \(\sqrt{n}\).
Như vậy, với hướng giải quyết như trên, ta đã bỏ qua được nhiều giá trị cần xét, giúp cải thiện đáng kể tốc độ của thuật toán. Độ phức tạp của thuật toán này là \(O(\sqrt{n})\).
Trong hàm main(), ta tạo mảng numbers gồm các số cần kiểm tra tính nguyên tố, rồi gọi hàm isPrime() ra thực hiện.
Output:
-1: 0
0: 0
1: 0
2: 1
3: 1
4: 0
5: 1
100000031: 0
100000032: 0
100000033: 0
100000037: 1
100000039: 1
Mã nguồn¶
Code đầy đủ được đặt tại GitHub.