VBAエクセル - 素数

VBAエクセル - 素数

前書き

Sieve of Eratosthenesは、特定の制限( n番目の数)までのすべての素数を見つけることを可能にするアルゴリズムです。 これには、 2からnまでのすべての番号をループして、アクティブな番号が倍数であるかどうかを調べることが含まれます。 倍数でない場合は、その数は素数です。
  • ウィキペディアでEratosthenes社のふるいの詳細情報://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

アルゴリズム

まず、NbreMaxまでのすべての番号をリストする必要があります。
  • 1が削除されます。
  • 2を強調表示し、その倍数のすべてを除去
  • 番号3の操作を繰り返します。
  • 強調表示されていない最小の番号を選択し、その倍数をすべて削除します(番号5、...)。
  • n根の整数部に達するまで、このプロセスを繰り返します。

残りの数(最大n)はすべて素数です。

関数

このタイプの関数は、整数型または長整数型を返すように簡単に変更できます。コードの実行は非常に遅いので、最初の1500個の素数に制限します。

 バリアントとしての関数NbPremiers_Eratosthene(Rang As Long)

'Sieve of Eratosthenesを使ってn番目の素数をチェックする

長さとしてのi、長さとしてのj、長さとしてのk、長さとしてのNbreMax、est_premier()、ブールとしてのフラグ

Rang> = 1かつRang <= 1500の場合

ReDim Preserve est_premier(Rang)

k = 0

NbreMax = 20 * Rang '1500未満の十分な注ぎ数

フラグ= True

i = 2の場合NbreMaxへ

j = 2の場合i

j = iの場合、次に終了

もしi Mod j = 0ならばFlag = False:Exit For

Flag = Trueの場合

もしi = 2なら

est_premier(k)= 1

k = k + 1

そうでなければ

est_premier(k)= i

k = k + 1

終了の場合

そうでなければ

フラグ= True

終了の場合

k = Rangの場合、次に終了

次の私

NbPremiers_Eratosthene = est_premier(Rang - 1)

そうでなければ

"NbPremiers_Eratosthene ="ラングトロップグランドまたはプロッププティ(entre 1 et 1500で構成)。

終了の場合

終了機能

関数を呼び出す

2つの方法があります。

第n素数

 サブテスト()

'499番目の素数を得るために:

MsgBox NbPremiers_Eratosthene(499)

終了サブ

最初の99個の素数のリストを得る

 Sub ListeNbPrems()

'最初の99個の素数のリストを入手

Dim i As Long、Msg As String、Tb(98)

i = 1〜99の場合

Tb(i - 1)= NbPremiers_Eratosthene(i)

次の私

MsgBox Tb(0)& ""&Tb(1)& ""&Tb(2)& "..."&Tb(UBound(Tb))

終了サブ

ダウンロードリンク

サンプルワークブックをここからダウンロードする://cjoint.com/14au/DHfoihzPEV2.htm
前の記事 次の記事

トップのヒント