|
|
プログラム例 |
プログラムリスト「エラトステネスのふるい」
'エラトステネスのふるい
Private Sub Command7_Click()
Dim box() As Long '動的配列
Dim jyougen As Long '上限
Dim i As Long 'ループカウンタ1
Dim j As Long 'ループカウンタ2
Dim k As Long '配列のカウント
Dim table As String 'メッセージ出力用
jyougen = Val(Text1.Text)
ReDim box(jyougen) As Long
For i = 2 To jyougen '2から上限値まですべてをふるいに入れる → 配列要素を 1にする
box(i) = 1 'インデックス番号0と1の配列要素は0のまま → 素数で はない
Next i
For i = 2 To Int(Sqr(jyougen)) 'ふるいの中の最小値を素数として、その倍数をす べて
'ふるいからはずす → 配列要素を0にする
If box(i) = 1 Then 'これでも良い
For j = 2 * i To jyougen 'For j = 2 * i jyougen step i
If j Mod i = 0 Then '←と同じ
box(j) = 0 ' box(j) = 0
End If '←と同じ
Next j 'Next j
End If
Next i
For i = 2 To jyougen
If box(i) = 1 Then 'ふるいで落とされなかった(配列要素が1)のが素数
'table = table & Str(i) & vbCrLf 'Chr(13) & Chr(10)
k = k + 1
End If
Next i
'処理時間短縮のため以下は表示しない
'MsgBox (table & vbCrLf & "合計" & k & "個")
MsgBox ("合計" & k & "個")
End Sub