Algoritma pengujian primitas deterministik (asimtotik) yang paling efisien adalah karena Lenstra dan Pomerance , berjalan dalam waktu . Jika Anda yakin dengan Hipotesis Riemann yang Diperpanjang, maka algoritma Miller berjalan dalam waktu . Ada banyak algoritma pengujian primality deterministik lainnya, misalnya kertas Miller memiliki algoritma , dan algoritma terkenal lainnya adalah Adleman-Pomerance-Rumley, berjalan dalam waktu .O~(log6n)O~(log4n)O~(n1/7)O(lognO(logloglogn))
Pada kenyataannya, tidak ada yang menggunakan algoritma ini, karena terlalu lambat. Alih-alih, algoritma pengujian primality probabilistik digunakan, terutama Miller-Rabin, yang merupakan modifikasi dari algoritma Miller yang disebutkan di atas (algoritma penting lainnya adalah Solovay-Strassen). Setiap iterasi Miller – Rabin berjalan dalam waktu , dan untuk probabilitas kesalahan konstan (katakanlah ) seluruh algoritma berjalan dalam waktu , yang jauh lebih cepat daripada Lenstra – Pomerance.O~(log2n)2−80O~(log2n)
Dalam semua tes ini, memori tidak menjadi masalah.
Dalam komentar mereka, jbapple mengangkat masalah memutuskan tes primality mana yang akan digunakan dalam praktik. Ini adalah pertanyaan implementasi dan pembandingan: menerapkan dan mengoptimalkan beberapa algoritma, dan secara eksperimental menentukan mana yang tercepat di kisaran mana. Bagi yang penasaran, para pembuat kode PARI melakukan hal itu, dan mereka datang dengan fungsi deterministik isprime
dan fungsi probabilistik ispseudoprime
, yang keduanya dapat ditemukan di sini . Uji probabilistik yang digunakan adalah Miller-Rabin. Yang deterministik adalah BPSW.
Berikut ini informasi lebih lanjut dari Dana Jacobsen :
Pari sejak versi 2.3 menggunakan bukti primitifitas APR-CL untuk isprime(x)
, dan kemungkinan uji BPSW (dengan uji Lucas "hampir ekstra kuat") untuk ispseudoprime(x)
.
Mereka memang mengambil argumen yang mengubah perilaku:
isprime(x,0)
(standar.) Menggunakan kombinasi (BPSW, teorema 5 Pocklington atau BLS75 cepat, April-CL).
isprime(x,1)
Menggunakan uji Pocklington-Lehmer (sederhana ).n−1
isprime(x,2)
Menggunakan APR-CL.
ispseudoprime(x,0)
(standar.) Menggunakan BPSW (MR dengan basis 2, Lucas "hampir ekstra kuat").
ispseudoprime(x,k)
(untuk ) Apakah MR menguji dengan basis acak. RNG diunggulkan secara identik di setiap run Pari (jadi urutannya deterministik) tetapi tidak diulang di antara panggilan seperti yang dilakukan GMP (Basis acak GMP sebenarnya adalah basis yang sama setiap panggilan jadi jika salah satu kali maka selalu salah).k≥1kmpz_is_probab_prime_p(x,k)
Pari 2.1.7 menggunakan pengaturan yang jauh lebih buruk. isprime(x)
hanya tes MR (default 10), yang menyebabkan hal-hal menyenangkan seperti isprime(9)
kembali benar cukup sering. Menggunakan isprime(x,1)
akan melakukan bukti Pocklington, yang baik untuk sekitar 80 digit dan kemudian menjadi terlalu lambat untuk berguna secara umum.
Anda juga menulis Pada kenyataannya, tidak ada yang menggunakan algoritma ini, karena terlalu lambat. Saya yakin saya tahu apa yang Anda maksud, tetapi saya pikir ini terlalu kuat tergantung pada audiens Anda. AKS tentu saja, sangat lambat, tetapi APR-CL dan ECPP cukup cepat sehingga beberapa orang menggunakannya. Mereka berguna untuk kripto paranoid, dan berguna bagi orang yang melakukan hal-hal seperti primegaps
atau di factordb
mana seseorang memiliki cukup waktu untuk menginginkan bilangan prima yang terbukti.
[Komentar saya tentang itu: ketika mencari bilangan prima dalam rentang tertentu, kami menggunakan beberapa pendekatan penyaringan diikuti oleh beberapa tes probabilitas yang relatif cepat. Hanya kemudian, jika sama sekali, kami menjalankan tes deterministik.]
Dalam semua tes ini, memori tidak menjadi masalah. Ini masalah bagi AKS. Lihat, misalnya, eprint ini . Beberapa di antaranya tergantung pada implementasinya. Jika seseorang mengimplementasikan apa yang disebut video numberphile AKS (yang sebenarnya merupakan generalisasi dari Teorema Kecil Fermat), penggunaan memori akan sangat tinggi. Menggunakan implementasi NTL dari algoritma v1 atau v6 seperti kertas yang direferensikan akan menghasilkan sejumlah besar memori. Implementasi GMP v6 yang baik masih akan menggunakan ~ 2GB untuk prime 1024-bit, yang banyakmemori untuk sejumlah kecil. Menggunakan beberapa perbaikan Bernstein dan segmentasi biner GMP menghasilkan pertumbuhan yang jauh lebih baik (misalnya ~ 120MB untuk 1024-bit). Ini masih jauh lebih besar dari yang dibutuhkan oleh metode lain, dan tidak mengherankan, akan jutaan kali lebih lambat daripada APR-CL atau ECPP.
openssl pkeyparam -text
untuk mengekstrak string hex) menggunakan PARIisprime
(APR-CL sebagaimana dinyatakan): sekitar 80-an pada notebook cepat. Sebagai referensi, Chromium membutuhkan sedikit lebih dari 0,25 untuk setiap iterasi implementasi demo JavaScript saya dari tes Frobenius (yang jauh lebih kuat dari MR), jadi APR-CL tentu saja paranoid tetapi dapat dilakukan.ini adalah pertanyaan yang rumit karena apa yang dikenal sebagai "konstanta besar / galaksi" yang terkait dengan infleksi antara efisiensi dari algoritma yang berbeda. dengan kata lain terkait dengan setiap algoritma yang berbeda dapat menyembunyikan konstanta yang sangat besar sehingga lebih efisien atas lainnya berdasarkan pada kompleksitas fungsi asimptotik / fungsi saja " tendangan" untuk sangat besar . pemahaman saya adalah bahwa AKS adalah "lebih efisien" (dari algoritma bersaing) hanya untuk "jauh lebih besar " di luar jangkauan penggunaan praktis saat ini (dan yang tepatO ( f ( n ) ) O ( g ( n ) ) n n nO(f(n)) O(f(n)) O(g(n)) n n n sebenarnya sangat sulit untuk menghitung dengan tepat), tetapi perbaikan teoritis pada implementasi algoritma (secara aktif dicari oleh beberapa orang) dapat mengubah hal itu di masa depan.
melihat makalah baru-baru ini tentang arxiv yang menganalisis topik ini secara mendalam / terperinci, tidak yakin apa yang dipikirkan orang, belum mendengar reaksi sejauh ini, tampaknya mungkin tesis yang dibuat oleh siswa, tetapi mungkin salah satu analisis paling terperinci / komprehensif dari penggunaan praktis dari algoritma yang tersedia.
Deterministic Primality Testing - memahami algoritma AKS Vijay Menon
Algoritma yang kuat terlalu rumit untuk mengimplementasikan tcs.se
sumber