VBA Excel - Nomor prima
VBA Excel - Nomor prima
pengantar
The Sieve of Eratosthenes adalah algoritma yang memungkinkan kami menemukan semua bilangan prima hingga batas tertentu ( bilangan n ). Ini melibatkan perulangan melalui semua angka mulai dari 2 hingga n, untuk memeriksa apakah nomor yang aktif adalah beberapa. Jika bukan kelipatan, maka angkanya adalah bilangan prima.- Info lebih lanjut tentang Saringan Eratosthenes di Wikipedia: //en.wikipedia.org/wiki/Sieve_of_Eratosthenes
Algoritma
Pertama kita perlu daftar semua angka hingga NbreMax.- 1 dihapus.
- Sorot 2 dan hilangkan semua multi-nya
- Ulangi operasi untuk angka 3 .
- Pilih nomor terkecil yang tidak disorot dan kemudian hilangkan semua kelipatannya (nomor 5, ...).
- Ulangi proses ini sampai Anda mencapai bagian integer dari akar n .
Semua angka yang tersisa (hingga n) adalah bilangan prima!
Fungsinya
Jenis fungsi ini dapat dengan mudah dimodifikasi untuk mengembalikan tipe Integer atau Long number ... Kode ini cukup lambat untuk dieksekusi, jadi kita akan membatasi diri kita sendiri ke 1500 bilangan prima pertama ...Fungsi NbPremiers_Eratosthene (Rang As Long) Sebagai Varian'Periksa bilangan prima ke-n menggunakan Saringan Eratosthenes
Dim i As Long, j As Long, k As Long, NbreMax As Long, est_premier (), Tandai As Boolean
Jika Rang> = 1 Dan Rang <= 1500 Lalu
ReDim Preserve est_premier (Rang)
k = 0
NbreMax = 20 * Tidak cukup untuk mulai <1500
Bendera = Benar
Untuk i = 2 Ke NbreMax
For j = 2 To i
Jika j = i Lalu Keluar Untuk
Jika i Mod j = 0 Kemudian Flag = False: Exit For
Berikutnya
Jika Bendera = Benar Lalu
Jika i = 2 Lalu
est_premier (k) = 1
k = k + 1
Lain
est_premier (k) = i
k = k + 1
Berakhir jika
Lain
Bendera = Benar
Berakhir jika
Jika k = Mulai Lalu Keluar Untuk
Selanjutnya saya
NbPremiers_Eratosthene = est_premier (Rang - 1)
Lain
NbPremiers_Eratosthene = "Mulai trop grand ou trop petit (terdiri dari entre 1 et 1500 inclus)."
Berakhir jika
Fungsi Akhir
Meminta fungsi
Tersedia dua metode:Bilangan prima ke-n
Sub Tes ()'Untuk mendapatkan nomor perdana ke-499:
MsgBox NbPremiers_Eratosthene (499)
End Sub
Dapatkan daftar 99 bilangan prima pertama
Sub ListeNbPrems ()'Dapatkan daftar 99 bilangan prima pertama
Dim i As Long, Msg As String, Tb (98)
Untuk i = 1 hingga 99
Tb (i - 1) = NbPremiers_Eratosthene (i)
Selanjutnya saya
MsgBox Tb (0) & "" & Tb (1) & "" & Tb (2) & "..." & Tb (UBound (Tb))
End Sub