Thuật toán tìm số nguyên tố nhanh nhất năm 2024
Thuật toán kiểm tra Số Nguyên Tố Show
Thuật toán kiểm tra Số Nguyên Tố của một số nguyên dương, cùng với thuật toán tìm UCLN của hai số tự nhiên là những bài toán quan trọng trong Lập trình. Kiểm tra tính nguyên tố là bài toán kiểm tra xem một số tự nhiên 1. Số nguyên tố là gì?Số nguyên tố (prime) là số tự nhiên lớn hơn 1, chỉ có hai ước số là 1 và chính nó. Theo định nghĩa này thì các số 2, 3, 5, 7, 11,… là các số nguyên tố, trong đó số 2 là số nguyên tố chẵn duy nhất. Ví dụ: 7 là số nguyên tố vì trong khoảng từ 2 đến 6 không tồn tại số nào mà 7 chia hết cả. 2. Các Thuật toán kiểm tra Số Nguyên Tố Đơn GiảnPhương pháp đơn giản nhất để kiểm tra một số Nếu Thực ra việc kiểm tra với Lặp từng phần tử với bước nhảy 1 đến n-1Giả sử cần kiểm tra số
Độ phức tạp của thuật toán trên là $O(n)$. Lặp từng phần tử với bước nhảy 2Theo định nghĩa thì số 2 là số nguyên tố chẵn duy nhất, vì vậy ta sẽ loại 2 ra khỏi vòng lặp và trong thân vòng lặp chỉ kiểm tra các số lẻ mà thôi, cách này sẽ tối ưu hơn cách 1 rất nhiều.
Lặp từng phần tử đến $\sqrt{n}$Để tối ưu hơn, thay vì lặp tới Độ phức tạp của thuật toán trên là $O(\sqrt{n})$. Xem mã nguồn viết bằng ngôn ngữ Dart tại đây https://divin.dev/dart/2021/10/14/bai-tap-dart-17.html 3. Tối ưu thuật toán kiểm tra số nguyên tốChúng ta có thể tối ưu thuật toán trên bằng cách chỉ ra Tất cả những số nguyên tố lớn hơn `m`1 đều có dạng `2`6 (vì `2`7 là những số chẵn; `2`8 thì chia hết cho `m`1). Do đó, chúng ta chỉ cần kiểm tra các số có dạng def is_prime(n: int) -> bool:
4. Các Thuật toán kiểm tra Số Nguyên Tố Nâng CaoCác cách kiểm tra số nguyên tố kể trên có độ chính xác tuyệt đối nhưng khối lượng tính toán rất lớn. Theo Wiki thì chúng ta còn có những cách khác để kiểm tra tính nguyên tố của một số với một độ chính xác cho trước. Kiểm tra theo xác suấtCác phép kiểm tra tính nguyên tố hay dùng nhất là các thuật toán ngẫu nhiên. Giả sử có một mệnh đề Ta đưa ra một thuật toán, kết luận rằng Xác suất sai của phép kiểm tra có thể giảm xuống nhờ việc chọn một dãy độc lập các số `n`2; nếu với mỗi số `n`2 xác suất để thuật toán kết luận một hợp số là số nguyên tố là nhỏ hơn một nửa thì sau `n`6 lần thử độc lập, xác suất sai là nhỏ hơn `n`7, độ tin cậy của thuật toán sẽ tăng lên theo `n`6. Cấu trúc cơ bản của một phép kiểm tra ngẫu nhiên là:
Sau nhiều lần thử, nếu hệ thức đúng với nhiều giá trị của Các hệ thức thường sử dụngNếu `n-1`7 là một số nguyên tố thì
Các phép kiểm tra tính nguyên tố ngẫu nhiên là:
Các phép kiểm tra tất địnhVào năm 2002, Manindra Agrawal, Nitin Saxena và Neeraj Kayal đề xuất một giải thuật tất định kiểm tra tính nguyên tố, là kiểm tra AKS, có khả năng chạy trong O((log n)12). Trên thực tế thuật toán này chạy chậm hơn các phương pháp xác suất. |