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

Tautan unduhan

Unduh buku kerja sampel di sini: //cjoint.com/14au/DHfoihzPEV2.htm
Artikel Sebelumnya Artikel Berikutnya

Tips