Apakah ada algoritma yang efisien untuk pengujian primality untuk angka-angka yang berbentuk menggunakan fungsi akar kuadrat?

8

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).p4k+3aak+1ak

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 ).N=4k+3NSQRTN(a)=ak+1

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.aZNap121(modp)ak+1=xaxa2aaaZNkk

Saya terutama memiliki intuisi tentang mengapa ini benar tetapi bukan bukti formal. Dari fakta pertama bahwa xa=ak+1 adalah akar kuadrat ketika p adalah prima, itu harus berarti bahwa xa2a(modp) . Oleh karena itu, jika a adalah QR maka pemeriksaan itu akan berlalu (separuh waktu kita akan memilih QR sehingga kemungkinan kita memilih non QR hanya 1/2).

Namun, jika N adalah komposit, tampaknya kita tidak memiliki jaminan bahwa xa2a(modN) . 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 N=4k+3 untuk memutuskan apakah N 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?

Charlie Parker
sumber
@Kyle Jones, ada kemungkinan Anda mungkin ingin mengembalikan (membatalkan penghapusan) jawaban Anda? Saya pikir ini memiliki wawasan yang bagus - Saya tidak cukup menghargai itu pada pandangan pertama, tetapi pada pemeriksaan lebih lanjut saya pikir itu adalah contoh yang bagus.
DW
@DW OK. Saya tidak berpikir itu bernilai karena jawaban Anda yang lebih komprehensif, tetapi saya akan mengembalikannya jika Anda pikir itu berharga.
Kyle Jones
Saya punya ide baru setelah meninjau Miller-Rabin. Apa pendapat Anda tentang algoritme yang baru saya usulkan? @KyleJones
Charlie Parker
@CharlieParker Jika Anda memiliki pertanyaan baru, Anda harus menanyakannya di pos terpisah. Jika Anda mengedit pertanyaan ini sehingga membatalkan jawaban yang ada, itu mengalahkan tujuan memiliki repositori pertanyaan dan jawaban.
Kyle Jones
@KyleJones sulit untuk memutuskan karena ini benar-benar tentang topik yang sama. Apa yang Anda sarankan? Saya dapat membuka pertanyaan baru, saya hanya tidak yakin apakah itu tepat.
Charlie Parker

Jawaban:

5

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.NN=91a=9a(N1)/2=9451(mod91)aa(N+1)/4=92381(mod91)8129(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.NN

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.aa

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(N1)/21(modN)(a(N+1)/4)2a(modN)a(N+1)/2a(modN)a(N+1)/2a×a(N1)/2(modN)a(N1)/21(modN)aa(N+1)/2a(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".kaaa

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.1N111NNN=4k+3

DW
sumber
Saya punya ide baru setelah meninjau Miller-Rabin. Apa pendapat Anda tentang algoritme yang baru saya usulkan?
Charlie Parker
1
@CharlieParker, daripada mengedit pertanyaan dengan cara yang membatalkan jawaban yang sudah ada, kami biasanya memilih Anda mengajukan pertanyaan baru. Saya sarankan Anda melakukan itu. (Petunjuk: pikirkan tentang bagaimana Anda berencana untuk menghitung sqrt ...)
DW
3

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, tapip154k+3k=31000010021000015a1010k+110410000p10p 10a10p102 = yaitu mod , jadi telah lulus tes primailty. Namun kita tahu adalah komposit.10010ppp

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, , ).araa=r2modNaap=15r=5

Kyle Jones
sumber
Saya ingin tahu apakah ada kesalahan di suatu tempat dalam perhitungan Anda, atau jika saya salah memahami algoritma yang diusulkan. tidak lulus uji QR: , bukan . Oleh karena itu, menurut pemahaman saya tentang algoritma yang diusulkan, tidak akan diterima sebagai QR dan algoritma tidak akan mencoba melakukan perhitungan lebih lanjut dengannya. Saya berasumsi bahwa cara algoritma menemukan QR yang dapat diterima adalah dengan memilih acak dan menguji apakah ; sepertinya itulah yang disarankan teks. a=10a(N1)/2=10710(mod15)1a=10aa(N1)/21(modN)
DW
@DW OK. Lagi pula, jawaban Anda lebih baik.
Kyle Jones
1
Ahh, melihat sedikit lebih dekat, saya melihat apa yang terjadi: 10 memang QR, tetapi centang keliru mengira itu bukan QR. Jadi, jika cara algoritma bekerja sebagai untuk memilih nomor acak , persegi itu, dan memanggil hasilnya (yaitu, ), maka jawaban Anda akan menjadi counterexample valid - dan itu tidak interpretasi yang tidak masuk akal dari algoritma yang diusulkan. Keren, jawaban yang bagus! a(N1)/2=1(modN)raa=r2modN
DW