Salam! Saya memutuskan pada waktu luang saya untuk meneliti masalah menemukan bilangan prima. Topiknya luas dan menarik. Saya ingin berbagi beberapa pemikiran tentang hal itu yang terlintas di benak saya. Pencarian di Internet tidak mengungkapkan hal itu, menunjukkan keasliannya.
Pertama, saya belum pernah menemukan rumus matematika untuk menghitung bilangan prima secara berurutan. Tetapi bagaimanapun juga, jika ada algoritma, maka dimungkinkan untuk membuat formula menggunakan fungsi logis atau operator. Saya berikan di bawah ini rumus paling ringkas yang ternyata.
Untuk beberapa urutan angka 
kami memperkenalkan operator deteksi nomor pertama sama dengan:
\ mathbf {Dt_ {a}} (x_ {m}): = \ left \ {\ begin {matrix} m \ \ mathbf {jika} \ \ ada \ m: \ forall \, k <m \ x_ {k } \ neq a \ \ mathbf {dan} \ x_ {m} = a \\ 0 \ \ mathbf {jika tidak} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ end {matrix} \ benar.
Semua bilangan prima, dimulai dengan 5, dapat dihitung dengan rumus:
Operator 
beralih lagi 
sisanya membagi masing-masing nomor kandidat dengan kesederhanaan dengan 
angka 
untuk bilangan prima sudah ditemukan dalam kisaran hingga 
. Nomor kandidat dipilih secara berurutan dari himpunan bilangan ganjil yang lebih besar dari bilangan prima sebelumnya 
. 
Merupakan fungsi pi yang menunjukkan jumlah bilangan prima 
.
Operator 
beralih lagi 
nilai output operator 
sampai ditemukan 0. Karena rangkaian bilangan prima tak terbatas, ini akan terjadi cepat atau lambat. Di pintu keluar operator 
jadi akan selalu ada beberapa nomor 
. Batas bawah 
ditentukan oleh perbedaan maksimum bilangan prima yang berdekatan lebih kecil dari yang diinginkan. Peningkatan perbedaan ini terjadi secara logaritmik. Grafik di bawah ini menunjukkan ketergantungan pertumbuhan maksimum dan rata-rata 
dari 
n untuk 100.000 bilangan prima pertama. Nilai maksimum disampel dan dirata-rata untuk setiap seribu angka. 

Peningkatan maksimum dalam perbedaan bilangan prima 
ke nilai maksimum sebelumnya 
sama dengan 20 (untuk perbedaan bilangan prima 31397-31469 = 72 sehubungan dengan perbedaan 25523-25471 = 52). Itu adalah di wilayah di mana turunan dari logaritma amplop 
masih cukup besar, dan bilangan prima tidak lagi terlalu kecil. Berdasarkan nilai ini, kondisi untuk 
. Grafik 
untuk 50.000 bilangan prima pertama yang diberikan di bawah ini. Nilai dihitung untuk setiap seribu. 

Puncaknya terlihat pada 20. Dengan meningkatnya 
n, grafik menjadi minus, menunjukkan penurunan tingkat pertumbuhan bilangan prima besar.
Pertimbangan kedua adalah mengoptimalkan perhitungan urutan bilangan prima.
Algoritma yang ditetapkan dalam rumus di atas adalah metode yang ditingkatkan untuk menghitung pembagi. Perbaikan adalah untuk mengecualikan angka genap dari pertimbangan dan memeriksa pembagian hanya bilangan prima lebih kecil dari sq. akar nomor kandidat. Bagian tersulit dari algoritma adalah perhitungan dari himpunan fungsi 
mod yang tersisa. Kompleksitas dapat dikurangi dengan mengoptimalkan fungsi ini. Namun, ada cara yang bahkan lebih efektif. Biarkan 
Adalah urutan residu dari membagi bilangan prima yang ditemukan terakhir menjadi bilangan prima dari 3 ke akar. Kami akan membuat urutan formulir
dalam urutan mulai dari 
. Istilah terakhir dihitung jika 
. Ketika pada beberapa langkah perhitungan sisanya 
menjadi sama dengan 0, pergi ke urutan berikutnya. Ini dilakukan sampai 
saya ditemukan, di mana semua residu bukan nol. Ini berarti menemukan bilangan prima berikutnya. Urutan 
itu harus disimpan sampai bilangan prima berikutnya ditemukan. Rumus berulang untuk menghitung bilangan prima dengan cara ini dikonversi menjadi:
Dalam algoritma yang disajikan, 
mod operasi difasilitasi: habis dibagi oleh 
kali lebih banyak pembagi. Satu-satunya pengecualian adalah terjadinya pembagi sederhana yang baru. Dalam memori komputer, ketika mengimplementasikan algoritma, perlu untuk menyimpan array bilangan prima ke root yang dicari, serta array variabel residual. Kompleksitas algoritma dalam pengertian umum (jumlah pekerjaan) mungkin kurang dari metode yang dikenal lainnya. Operasi paling kompleks di dalamnya adalah ekstraksi akar kuadrat, perhitungan residu dan penggandaan. Root dapat diekstraksi ke integer terdekat. Untuk mendapatkan residu, Anda dapat menggunakan algoritme yang efektif berdasarkan aturan umum pembagian. Perkalian hanya digunakan oleh 2 angka yang relatif kecil 
i . Kompleksitas waktu dari algoritma dapat dikurangi dengan mendistribusikan pekerjaan sesuai dengan nilai-nilai 
i . Saringan tersegmentasi yang diperoleh dengan cara ini harus bekerja lebih cepat pada komputer multi-utas. Namun, pekerjaan yang dilakukan akan lebih besar karena peningkatan dividen. Anda juga dapat "mengacaukan" faktorisasi roda ke algoritme. Dengan ukuran roda yang optimal, ini dapat mengurangi kerumitan dalam kisaran 
n - hingga perangkat keras "liar" memperlambatnya.
Mungkin seseorang akan berguna pikiran saya.