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 45 ≡ 1NN=91a=9một một ( N + 1 ) / 4 = 9 23 ≡ 81a(N−1)/2=945≡1(mod91)a81 2 ≡ 9a(N+1)/4=923≡81(mod91)91 = 7 × 13812≡9(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 ) 2 ≡ mộta(N−1)/2≡1(modN)một ( N + 1 ) / 2 ≡ một(a(N+1)/4)2≡a(modN)một ( N + 1 ) / 2 ≡ một × một ( N - 1 ) / 2a(N+1)/2≡a(modN)một ( N - 1 ) / 2 ≡ 1a(N+1)/2≡a×a(N−1)/2(modN)một một ( N + 1 ) / 2 ≡ mộta(N−1)/2≡1(modN)aa(N+1)/2≡a(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 + 31N11−1NNN=4k+3