Có thuật toán hiệu quả nào để kiểm tra tính nguyên thủy cho các số có dạng


8

Tôi đã đọc CLRS và nó hỏi để chứng minh rằng nếu p là số nguyên tố có dạng 4k+3a là một dư lượng bậc hai, sau đó ak+1 là một căn bậc hai (người ta cũng có thể dễ dàng thấy rằng ak là một căn bậc hai).

Tôi đã tự hỏi nếu sử dụng thực tế trước đó và chúng tôi cũng biết rằng chúng tôi có một số dạng N=4k+3 (không nhất thiết là số nguyên tố), thì có thể có một thử nghiệm nguyên thủy khác cho (bất kỳ?) N bằng cách sử dụng căn bậc hai hàm (tức là SQRTN(a)=ak+1 ).

Vì vậy, thuật toán mà tôi nghĩ là như sau:

Chọn Dư lượng bậc hai (QR) aZN (người ta có thể dễ dàng thực hiện việc này bằng cách kiểm tra xem giữ). Khi chúng tôi có mã QR, hãy tính và kiểm tra xem có bằng . Nếu nó đúng, thì chúng ta kết luận rằng là số nguyên tố. Mặt khác, chúng tôi chọn một QR khác và lặp lại thuật toán. Người ta có thể lặp lại thuật toán này lần. Nếu sau lần không có thành công thì kết luận số là tổng hợp.ap121(modp)x 2 a a a a Z N k kak+1=xaxa2aaaZNkk

Tôi chủ yếu có trực giác về lý do tại sao nó chính xác nhưng không phải là một bằng chứng chính thức. Từ thực tế đầu tiên, là căn bậc hai khi là số nguyên tố, điều đó có nghĩa là . Do đó, nếu là QR thì kiểm tra đó sẽ qua (một nửa thời gian chúng tôi sẽ chọn QR nên có lẽ chúng tôi chọn không phải QR chỉ là 1/2). p x 2 aaxa=ak+1paxa2a(modp)a

Tuy nhiên, nếu là composite, có vẻ như chúng tôi không có gì bảo đảm rằng . Vì vậy, nếu nó không giữ chúng tôi chắc chắn nó không phải là chính. Nhưng nếu nó giữ thì nếu nguyên tố của nó, chúng ta đúng nhưng nếu tổng hợp của nó, chúng ta có thể sai? Về cơ bản, có thể sử dụng hàm SQRT khi để quyết định xem có phải là số nguyên tố hay không?x 2 aaNxa2a(modN)NN=4k+3N


Tôi cũng đã nghĩ đến một thuật toán khác xứng đáng với câu hỏi của riêng mình: Liệu tính toán một căn bậc hai của một số và có nhiều hơn 2 gốc là một cách đáng tin cậy để quyết định tính nguyên thủy?


@Kyle Jones, bất kỳ cơ hội nào bạn có thể sẵn sàng khôi phục (không xóa) câu trả lời của bạn? Tôi nghĩ rằng nó có một cái nhìn sâu sắc tốt đẹp - tôi đã không đánh giá cao nó ngay từ cái nhìn đầu tiên, nhưng khi kiểm tra thêm tôi nghĩ đó là một ví dụ hay.
DW

@DW OK. Tôi không nghĩ nó có nhiều giá trị với câu trả lời toàn diện hơn của bạn, nhưng tôi sẽ mang nó trở lại nếu bạn nghĩ nó đáng giá.
Kyle Jones

Tôi đã có một ý tưởng mới sau khi xem xét Miller-Rabin. Bạn nghĩ gì về thuật toán mới được đề xuất của tôi? @KyleJones
Charlie Parker

@CharlieParker Nếu bạn có một câu hỏi mới, bạn nên hỏi nó trong một bài riêng. Nếu bạn chỉnh sửa câu hỏi này để nó vô hiệu hóa các câu trả lời hiện có, nó sẽ đánh bại mục đích có kho lưu trữ câu hỏi và câu trả lời.
Kyle Jones

@KyleJones thật khó để quyết định bởi vì nó thực sự về cùng một chủ đề. Bạn có đề nghị gì? Tôi có thể mở một câu hỏi mới, tôi chỉ không chắc là nó có phù hợp không.
Charlie Parker

Câu trả lời:


5

Hãy để tôi bắt đầu với một ví dụ mẫu trong đó thuật toán của bạn đưa ra câu trả lời sai: nghĩa là, trong đó là hợp số nhưng thuật toán của bạn kết luận nó là số nguyên tố. Giả sử và . Sau đó, , do đó, vượt qua kiểm tra của bạn là QR. Ngoài ra, và , vì vậy điều này vượt qua bài kiểm tra thứ hai của bạn, thuật toán của bạn sẽ kết luận rằng 91 là số nguyên tố. Tuy nhiên, 91 không phải là số nguyên tố: . Do đó, thuật toán của bạn đã rút ra kết luận sai trong trường hợp này. Điều này chứng tỏ rằng thuật toán của bạn có thể đưa ra câu trả lời không chính xác trong ít nhất một số trường hợp.N = 91 một = 9 một ( N - 1 ) / 2 = 9 451NN=91a=9một một ( N + 1 ) / 4 = 9 2381a(N1)/2=9451(mod91)a81 29a(N+1)/4=92381(mod91)91 = 7 × 138129(mod91)91=7×13


Trên thực tế, có một vấn đề nghiêm trọng hơn với thuật toán của bạn. Không có số nơi thuật toán của bạn sẽ xuất ra "tổng hợp". Nó nghĩ rằng tất cả các số là số nguyên tố. Chính xác hơn, với mỗi , thuật toán của bạn sẽ lặp lại mãi mãi (cố gắng tìm một số vượt qua kiểm tra QR, vô ích) hoặc sẽ chấm dứt và xuất ra "số nguyên tố". Vì vậy, thuật toán của bạn là sai như có thể.NNN

Bạn có thể thấy điều này bằng cách áp dụng một số lý thuyết số. Bạn có một bài kiểm tra xem có phải là QR không và bài kiểm tra thứ hai dựa trên cái nhìn sâu sắc căn bậc hai. Nếu vượt qua bài kiểm tra đầu tiên, nó sẽ vượt qua bài kiểm tra thứ hai.mộtaa

Đây là lý do tại sao. Kiểm tra QR của bạn thành công nếu . Thử nghiệm thứ hai của bạn thành công nếu . Sau này là tương đương với . Nhưng . Do đó, nếu , thì (nhân cả hai bên với ), chúng ta thấy ngay rằng chúng ta phải có .( một ( N + 1 ) / 4 ) 2mộta(N1)/21(modN)một ( N + 1 ) / 2một(a(N+1)/4)2a(modN)một ( N + 1 ) / 2một × một ( N - 1 ) / 2a(N+1)/2a(modN)một ( N - 1 ) / 21a(N+1)/2a×a(N1)/2(modN)một một ( N + 1 ) / 2mộta(N1)/21(modN)aa(N+1)/2a(modN)

Mỗi phòng trong số đi của thuật toán của bạn thường liên quan đến tìm kiếm một mà vượt qua bài kiểm tra đầu tiên, và sau đó kiểm tra xem nó vượt qua các bài kiểm tra thứ hai - nhưng dựa trên cái nhìn sâu sắc trước đây, chúng ta thấy rằng bất kỳ đã vượt qua bài kiểm tra đầu tiên sẽ được đảm bảo để vượt qua bài kiểm tra thứ hai là tốt. Vì vậy, nếu các thuật toán bao giờ tìm thấy bất kỳ giá trị mà vượt qua bài kiểm tra QR, thử nghiệm thứ hai sẽ tự động chuyển và các thuật toán sẽ đưa ra "thủ".a a akaaa

Bài học để học: bất cứ khi nào bạn nghĩ rằng bạn có một thuật toán có vẻ hứa hẹn, đáng để mã hóa nó và thử nó trên một số trường hợp thử nghiệm và xem liệu nó có hoạt động tốt không. Thử nó trên một vài trường hợp thử nghiệm không phải là sự thay thế cho bằng chứng chính xác , nhưng nó có thể là một cách hữu ích để loại bỏ một số thuật toán không chính xác một cách nhanh chóng.


Cuối cùng, về câu hỏi thực sự của bạn: chúng ta có thể sử dụng một cái gì đó như thế này để xây dựng một bài kiểm tra nguyên thủy không? Chà, bạn có thể nghĩ về bài kiểm tra nguyên thủy Miller-Rabin dựa trên một cái gì đó như thế này. Chúng dựa trên một đặc tính của căn bậc hai của sẽ như thế nào, nếu là số nguyên tố. Nếu bạn gặp một căn bậc hai của đó không phải là hoặc , bạn có thể kết luận rằng không phải là số nguyên tố. Tuy nhiên, nó không giới hạn ở số có dạng , vì vậy theo nghĩa đó, nó chắc chắn là khác nhau.N 1 1 - 1 N N N = 4 k + 31N111NNN=4k+3


Tôi đã có một ý tưởng mới sau khi xem xét Miller-Rabin. Bạn nghĩ gì về thuật toán mới được đề xuất của tôi?
Charlie Parker

1
@CharlieParker, thay vì chỉnh sửa câu hỏi theo cách vô hiệu hóa các câu trả lời hiện có, chúng tôi thường muốn bạn hỏi một câu hỏi mới. Tôi đề nghị bạn làm điều đó. (Gợi ý: suy nghĩ về cách bạn dự định tính toán sqrt ...)
DW

3

Sự đồng dạng là đúng đối với tất cả các số nguyên tố có dạng đúng nhưng nó cũng đúng với một số số tổng hợp, điều này làm cho một mình đồng dư vô dụng như một phép thử nguyên thủy.p

Ví dụ: đặt thành số , rõ ràng là hợp số và có dạng với . là , vì vậy mod tạo ra dư lượng bậc hai = . = = ; áp dụng mod để mang lại . Bây giờ kiểm tra: Theo mod được coi là căn bậc hai của ( ) chỉ khi là số nguyên tố, nhưng15 4 k + 3 k = 3 10000 100 2 10000 15 a 10 10 k + 1 10 4 10000 p 10 p 10 a 10 p 10 2 100 10 p p pp154k+3k=31000010021000015a1010k+110410000p10p 10a10p102 = là mod , vì vậy đã vượt qua bài kiểm tra primailty. Tuy nhiên, chúng tôi biết là composite.10010ppp

Điều này chứng tỏ rằng ngay cả khi phương pháp chọn QR của bạn là hoàn hảo, thuật toán vẫn có thể sai. Chẳng hạn, đây sẽ là một cách hợp lý để chọn : chọn một số ngẫu nhiên , bình phương nó và gọi kết quả (nghĩa là ). Sau đó, bạn biết rằng được đảm bảo là QR và không cần kiểm tra bằng cách sử dụng thử nghiệm mà bạn đã liệt kê. Nếu đó là cách thuật toán của bạn chọn , thì ví dụ trên cho thấy thuật toán của bạn có thể đưa ra câu trả lời sai trong một số trường hợp (ví dụ: , ).araa=r2modNaap=15r=5


Tôi tự hỏi nếu có lỗi ở đâu đó trong tính toán của bạn, hoặc nếu tôi hiểu sai thuật toán đề xuất. không vượt qua bài kiểm tra QR: , không phải . Do đó, theo sự hiểu biết của tôi về thuật toán được đề xuất, sẽ không được chấp nhận dưới dạng QR và thuật toán sẽ không cố thực hiện bất kỳ tính toán nào nữa với nó. Tôi giả định rằng cách thức các thuật toán tìm thấy một QR có thể chấp nhận là để chọn cách ngẫu nhiên và kiểm tra xem ; đó dường như là những gì văn bản đang gợi ý. a=10a(N1)/2=10710(mod15)1a=10aa(N1)/21(modN)
DW

@DW OK. Câu trả lời của bạn hoàn toàn tốt hơn dù sao đi nữa.
Kyle Jones

1
À, nhìn kỹ hơn một chút, tôi thấy những gì đang diễn ra: 10 thực sự là một QR, nhưng kiểm tra nhầm tưởng rằng đó không phải là QR. Vì vậy, nếu cách thuật toán hoạt động để chọn một số ngẫu nhiên , bình phương nó và gọi kết quả (nghĩa là ), thì câu trả lời của bạn sẽ là một ví dụ hợp lệ - và đó không phải là một cách giải thích không hợp lý của thuật toán đề xuất. Thật tuyệt, câu trả lời hay! a(N1)/2=1(modN)raa=r2modN
DW
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.