Cách kiểm tra số nguyên tố

     

Kiểm tra xem một số n liệu có phải là số nguyên tố hay không vốn là một trong bài toán solo giản họ đều tiếp xúc từ khi bắt đầu bập bẹ những việc lập trình đầu tiên. Mặc dù nhiên, để thỏa mãn nhu cầu những nhu cầu lớn tưởng của các ngành khoa học máy tính hiện thời như cryptography - mật mã hóa, rất nhiều thuật toán kiểm soát số nguyên tố rất cần được vượt xa giới hạn 32 bit nhỏ tuổi nhoi mà thông thường chúng ta tuyệt sử dụng.

Hôm nay họ sẽ phân tích hồ hết thuật toán nền tảng gốc rễ để khám nghiệm số yếu tắc - tự "thô sơ" đến "hiện đại"!

1. Thuật toán bình chọn nguyên tố là gì?

Thuật toán bình chọn nguyên tố là phần nhiều thuật toán để chất vấn xem một số n có phải là số nguyên tố hay không. Không y như thuật toán đối chiếu thừa số nguyên tố, kiểm soát nguyên tố đơn giản hơn nhiều về khía cạnh tính toán, bước thực hiện, và thời gian chạy.

Bạn đang xem: Cách kiểm tra số nguyên tố

Hầu hết phần lớn thuật toán chất vấn nguyên tố sẽ chứng tỏ sốncó yêu cầu là hòa hợp số giỏi không, chính vì như vậy tên gọi đúng chuẩn của phần lớn thuật toán bởi thế sẽ là đánh giá hợp số. Mặc dù chúng đều hướng về một phương châm là kiếm tìm kiếm phần lớn số nguyên tố.

2. Số đông kiểm tra đối kháng giản

Dựa vào quan niệm của số yếu tắc (là số chỉ phân chia hết cho một và chính nó), ta sẽ sở hữu được thuật toán kiểm nguyên tố đơn giản nhất:

Kiểm tra những số từ 2 đến n - 1, trường hợp n phân tách hết cho một trong những số kia thì n chưa phải là số nguyên tố. Trái lại thì n là số nguyên tố.

Độ tinh vi thời gian (ĐPT) của thuật toán bên trên là O(n)

Tuy nhiên, y như thuật toán đếm số cầu củan, ta trọn vẹn có thể cách tân để bớt ĐPT:

Kiểm tra các số từ bỏ 2 cho √n, nếu n phân chia hết cho trong những số đó thì n không phải là số nguyên tố. Ngược lại thì n là số nguyên tố.

ĐPT: O(√n)

Tuy nhiên, chúng ta còn rất có thể phát triển tiếp thuật toán trên bằng phương pháp chứng minh nkhông chia hết cho những số nguyên tố nhỏ dại hơn nó.

Để ý rằng toàn bộ những số nguyên tố lớn hơn 3 đều có dạng 6k± 1(vì 6k,6k± 2,là số đông số chẵn; 6k + 3chia hết mang lại 3). Vậy phương thức kiểm tra hôm nay sẽ là:

Kiểm tra các số có dạng6k ± 1 từ 2 mang đến √n, trường hợp n chia hết cho một trong những số đó thì n không phải là số nguyên tố. Trái lại thì n là số nguyên tố.

// pseudocode - mã trả cho phương thức kiểm tra thành phần trênfunction is_prime(n) if n ≤ 3 then return n > 1 else if n gian lận 2 = 0 or n gian lận 3 = 0 return false let i = 5 while i × i ≤ n bởi vì if n % i = 0 or n % (i + 2) = 0 return false i = i + 6 return trueĐể ý rằng chúng ta bước đầu vòng lặp tự i = 5 (có dạng 6k - 1), bình chọn n phân tách i và n phân chia i + 2, và tăng i lên 6 sau mỗi bước. Bởi thế ta có thể duyệt tất cả các số tất cả dạng6k± 1không thừa quá√n.

ĐPT:O(√n / 6)(cũng là O(√n), nhưng cấp tốc hơn vài ba mili giây)

Bây giờ, thay bởi vì 6, chúng ta có thể sử dụng 30. Thay do 30, bạn cũng có thể sử dụng tích của n số yếu tắc đầu tiên.

Thế nhưng phương thức này vẫn không đủ mặc dù chỉ so với những số nguyên 64 bit. Vì vậy nên chúng ta cần những phương thức mạnh hơn với ĐPT tốt hơn.

3. đầy đủ phép test nền tảng

Thường thì những kiểm tra nguyên tố táo bạo sẽ chuyển động trong thời hạn log n, kia là cũng chính vì hầu hết các phép demo nguyên tố dễ dàng và đơn giản sau những chạy trong thời gian ngắn tuyệt nhất là log n:

Nếu p là một vài nguyên tố thì:

fp + 1≡ 0 (mod p) (với fp + một là số Fibonacci thứ phường + 1 và p. Có dạng 5k± 2)

Tuy nhiên, chỉ đối chọi thuần áp dụng những phép thử trên sẽ không giúp chúng ta kết luận được số sẽ thử là số nguyên tố.

Xem thêm: Hội Nghị Lần Thứ Tám (Ngày 10-19/5/1941) Của Ban Chấp Hành Trung Ương Đảng

Ngoài ra còn phép thử: (p - 1)! ≡ -1 (mod p)khi và chỉ còn khipnguyên tố. Đây là câu chữ của định lí Wilson, nhưng việc đo lường và thống kê biểu thức(n - 1)! % nsẽ có ĐPT khủng hơnlog n.

Trên thực tế, trong phần lớn trường hợp, họ chỉ yêu cầu phép thử đầu tiên cho các kiểm tra "sừng sỏ" mình sẽ giới thiệu sau đây.

4. Những khám nghiệm xác suất

Chúng được gọi là "xác suất" vì sau thời điểm kiểm tra, chúng ta không thể thực sự chắc chắn là liệu ncó nguyên tố hay không như những phương thức đơn giản trên. Tuy nhiên, bọn chúng lại được dùng nhiều hơn thế những phương pháp bảo vệ độ chắc chắn rằng vì tốc độ triển khai của chúng.

Những số vượt qua kiểm tra xác suất mà trên thực tế không bắt buộc là số yếu tắc được call là hầu hết số "giả nguyên tố".

Kiểm tra Fermat

Đây là kiểm tra xác suất dễ dàng và đơn giản nhất. Nó trực tiếp thực hiện định lí Fermat nhỏ:

Chọn số a làm thế nào cho (a, n) = 1. Nếuan - 1 ≠ 1 (mod n)thì nlà phù hợp số. Ngược lại,ncó thểlà số nguyên tố.

Với a = 2, n = 341, cho dù 341 là hợp số (341 = 11 x 31), đẳng thức sau vẫn đúng:2341 - 1≡ 1 (mod 341). Vị vậy, càng những số a đúng cùng với đẳng thức trên, tài năng n là số yếu tố càng tăng. Mặc dù nhiên, vẫn đang còn những hòa hợp số n vừa lòng đẳng thứcan - 1≡ 1 (mod n)với hầu như số anguyên tố cùng nhau vớin, như số 561. Những số bởi vậy gọi là số Carmichael.

Kiểm tra Miller-Rabin

Đây là kiểm tra rườm rà hơn nhưng chắc hơn kiểm tra Fermat, vì đây là kiểm tra số mang nguyên tố mạnh. Kiểm tra này chuyển động như sau:

Chọn 1 số ít a bất kì nhỏ dại hơn n. đưa sử n - 1 = 2sd cùng với d lẻ. Nếu:

ad≠ 1 (mod n)a(2 ^ r)d≠ -1 (mod n) (^ là kí hiệu phép lũy thừa, chưa phải phép XOR đâu)

thì nlà hòa hợp số. Ngược lại,n có thểlà số nguyên tố.

Kiểm tra Solovay-Strassen

Kiểm tra này tinh vi hơn nhưng lại yếu hèn hơn kiểm soát Miller-Rabin.

Chọn 1 số a bất kì nhỏ tuổi hơn n. Nếu

*
thìnlà hợp số. Ngược lại,n có thểlà số nguyên tố. (vế buộc phải làkí hiệu Jacobi)

Ngoài đông đảo kiểm tra tỷ lệ phổ trở thành trên, còn những đánh giá khác phức tạp hơn hẳn như kiểm tra Frobenius hay chất vấn Baillie-PSW. Ta cũng hoàn toàn có thể sử dụng đồng thời những kiểm tra trên để tăng tính đúng chuẩn của thuật toán. Ví như kiểm tra Baillie-PSW áp dụng kiểm tra Miller-Rabin cùng kiểm tra xác suất Lucas.

Xem thêm: Tìm Hiểu Về Cấu Tạo Bộ Phận Sinh Dục Của Mèo Cái Đơn Giản Bằng Mắt Thường

Tạm kết

Trên đấy là những phương pháp phổ thay đổi để đánh giá tính yếu tố của một số. Tuy nhiên sử dụng chúng cấp thiết giúp họ tìm được số nguyên tố lớn số 1 hiện nay, chúng có vẻ thừa đủ nhằm hỗ trợ chúng ta trong những sự việc lập trình hàng ngày.