エラトステネスプログラム例

プログラム例
プログラムリスト「エラトステネスのふるい」

'エラトステネスのふるい
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