Saya sedang membaca CLRS dan diminta untuk menunjukkan bahwa jika adalah bilangan prima dari bentuk dan adalah residu kuadratik, maka adalah akar kuadrat (orang juga dapat dengan mudah menunjukkan bahwa adalah akar kuadrat).
Saya bertanya-tanya apakah menggunakan fakta sebelumnya dan juga kami tahu kami memiliki sejumlah bentuk (belum tentu prima), maka mungkin ada pengujian primality yang berbeda untuk (apa?) menggunakan fungsi akar kuadrat (yaitu ).
Jadi algoritma yang saya pikir adalah sebagai berikut:
Pilih Residu Quadratic (QR) (orang dapat dengan mudah melakukan ini dengan memeriksa apakah a ^ {\ frac {p-1} {2}} \ equiv 1 \ pmod p hold ). Setelah kita memiliki QR, hitung a ^ {k + 1} = x_a dan periksa apakah x_a ^ 2 sama dengan a . Jika itu benar, maka kita simpulkan bahwa a adalah prima. Jika tidak, kami memilih QR a '\ in \ mathbb {Z} ^ * _ N yang berbeda dan ulangi algoritme. Satu dapat mengulangi algoritma ini k kali. Jika setelah k kali tidak ada keberhasilan maka simpulkan angka tersebut gabungan.
Saya terutama memiliki intuisi tentang mengapa ini benar tetapi bukan bukti formal. Dari fakta pertama bahwa adalah akar kuadrat ketika adalah prima, itu harus berarti bahwa . Oleh karena itu, jika adalah QR maka pemeriksaan itu akan berlalu (separuh waktu kita akan memilih QR sehingga kemungkinan kita memilih non QR hanya 1/2).
Namun, jika adalah komposit, tampaknya kita tidak memiliki jaminan bahwa . Jadi jika tidak tahan, kami yakin itu bukan yang utama. Tetapi jika itu memang berlaku maka jika prima kita benar tetapi jika gabungannya kita mungkin salah? Pada dasarnya, apakah mungkin untuk menggunakan fungsi SQRT ketika untuk memutuskan apakah adalah prima atau tidak?
Saya juga memikirkan algoritma lain yang layak mendapatkan pertanyaannya sendiri: Apakah menghitung akar kuadrat dari suatu angka dan memiliki lebih dari 2 akar merupakan cara yang dapat diandalkan untuk memutuskan keutamaan?
sumber
Jawaban:
Biarkan saya mulai dengan contoh tandingan di mana algoritma Anda memberikan jawaban yang salah: yaitu, di mana adalah komposit tetapi algoritma Anda menyimpulkan itu adalah prima. Misalkan dan . Kemudian , jadi meneruskan cek Anda menjadi QR. Juga, dan , jadi ini akan melewati tes kedua Anda, algoritma Anda akan menyimpulkan bahwa 91 adalah prima. Namun, 91 tidak prima: . Jadi algoritma Anda telah menarik kesimpulan yang salah dalam kasus ini. Ini menunjukkan bahwa algoritma Anda dapat menampilkan jawaban yang salah setidaknya dalam beberapa kasus.N N=91 a=9 a(N−1)/2=945≡1(mod91) a a(N+1)/4=923≡81(mod91) 812≡9(mod91) 91=7×13
Sebenarnya, ada masalah yang lebih serius dengan algoritma Anda. Tidak ada angka mana algoritme Anda akan menampilkan "gabungan". Ia berpikir bahwa semua angka adalah bilangan prima. Lebih tepatnya, untuk setiap , algoritme Anda akan berulang selamanya (mencoba menemukan nomor yang lulus uji QR, sia-sia), atau akan berakhir dan menampilkan "prima". Jadi, algoritma Anda hampir sama salahnya.N N
Anda dapat melihat ini dengan menerapkan sejumlah teori bilangan. Anda memiliki tes apakah adalah QR dan tes kedua berdasarkan wawasan akar kuadrat. Jika lulus tes pertama, itu akan lulus yang kedua.a a
Inilah sebabnya. Tes QR Anda berhasil jika . Tes kedua Anda berhasil jika . Yang terakhir adalah setara dengan . Tapi . Oleh karena itu, jika , maka (mengalikan kedua sisi dengan ) kita segera melihat bahwa kita harus memiliki .a(N−1)/2≡1(modN) (a(N+1)/4)2≡a(modN) a(N+1)/2≡a(modN) a(N+1)/2≡a×a(N−1)/2(modN) a(N−1)/2≡1(modN) a a(N+1)/2≡a(modN)
Masing-masing pass dari algoritme Anda pada dasarnya sama dengan mencari yang lulus tes pertama, dan kemudian mengecek apakah itu lulus tes kedua - tetapi berdasarkan wawasan sebelumnya, kami melihat bahwa setiap yang lolos tes pertama akan dijamin lulus tes kedua juga. Dengan demikian, jika algoritma pernah menemukan nilai yang lulus uji QR, tes kedua akan secara otomatis lulus dan algoritma akan menampilkan "prima".k a a a
Pelajaran untuk dipelajari: kapan pun Anda berpikir Anda memiliki algoritma yang terlihat menjanjikan, ada baiknya untuk membuat kode dan mencobanya pada beberapa kasus uji dan lihat apakah itu berfungsi dengan baik. Mencoba beberapa kasus uji bukan pengganti bukti kebenaran , tetapi bisa menjadi cara yang bermanfaat untuk menghilangkan beberapa algoritma yang salah dengan cepat.
Akhirnya, ke pertanyaan Anda yang sebenarnya: dapatkah kita menggunakan sesuatu seperti ini untuk membangun tes primality? Nah, Anda bisa menganggap tes primality Miller-Rabin longgar berdasarkan pada sesuatu seperti ini. Mereka didasarkan pada karakterisasi apa akar kuadrat dari akan terlihat seperti, jika adalah prima. Jika Anda menemukan akar kuadrat dari yang bukan atau , Anda dapat menyimpulkan bahwa tidak prima. Namun, itu tidak terbatas pada angka dari bentuk , jadi dalam arti itu pasti berbeda.1 N 1 1 −1 N N N=4k+3
sumber
Keselarasan adalah benar untuk semua bilangan prima dari bentuk yang benar tetapi juga berlaku untuk beberapa nomor komposit, yang membuat kesesuaian saja tidak berguna sebagai tes primality.p
Contoh: atur ke angka , yang jelas komposit dan berbentuk dengan . adalah , jadi mod menghasilkan residu kuadrat = . = = ; menerapkan mod untuk hasil yang . Sekarang tes: Under mod seharusnya akar kuadrat dari ( ) hanya jika adalah prima, tapip 15 4k+3 k=3 10000 1002 10000 15 a 10 10k+1 104 10000 p 10 p 10 a 10 p 102 = yaitu mod , jadi telah lulus tes primailty. Namun kita tahu adalah komposit.100 10 p p p
Ini menunjukkan bahwa bahkan jika metode Anda untuk memilih QR adalah sempurna, algoritme masih bisa keliru. Misalnya, di sini akan menjadi cara yang masuk akal untuk memilih : memilih nomor acak , persegi itu, dan memanggil hasil (yaitu, ). Maka Anda tahu bahwa dijamin menjadi QR, dan tidak perlu mengujinya menggunakan tes yang Anda daftarkan. Jika itu adalah bagaimana algoritma Anda memilih , maka contoh di atas menunjukkan bahwa algoritma Anda dapat memberikan jawaban yang salah dalam beberapa kasus (misalnya, , ).a r a a=r2modN a a p=15 r=5
sumber