素数

最近、"虚数の情緒―中学生からの全方位独学法"(吉田武 著)という本を読んでいます。
率直に言って、序章などで主張されている筆者の思想、姿勢には素直に頷けない点が多いのですが、1章以降の具体的な"数"についての話は面白く、楽しめます。
かなり分厚い本なので、まだ半分も読んでいませんけどね。


この本に影響されて、簡単なプログラムを組んでみました。

Sub Sieve_S()
    
    Cells.Select
    Selection.ClearContents
    Selection.Interior.ColorIndex = xlNone

    Dim lngN As Long
    lngN = 100  'この値までの素数を探す
    
    Dim lngSieve() As Long
    ReDim lngSieve(1 To lngN)
    
    Range("A1").Select
    ActiveCell.Value = lngN
    
    Dim i As Long
    Dim j As Long
    
    For i = 1 To lngN
        If i = 1 Then
            lngSieve(i) = 0
        Else
            lngSieve(i) = i
        End If
        
        If i Mod 10 = 1 Then
            ActiveCell.Offset(1, 0).Select
        End If
        
        If i Mod 10 = 0 Then
            ActiveCell.Offset(0, 9).Value = i
        Else
            ActiveCell.Offset(0, (i Mod 10) - 1).Value = i
        End If
    Next

    For i = 2 To Int(lngN / 2)
        For j = 1 To lngN
            If j Mod i = 0 Then
                If i <> j Then
                    lngSieve(j) = 0
                End If
            End If
        Next
    Next

    Range("A2").Select

    For i = 1 To lngN
        If lngSieve(i) = 0 Then
            Selection.Interior.ColorIndex = 38
            Selection.ClearContents
        Else
            Selection.Interior.ColorIndex = 34
        End If
        
        If i Mod 10 = 0 Then
            ActiveCell.Offset(1, -9).Select
        Else
            ActiveCell.Offset(0, 1).Select
        End If
    Next

End Sub

これはEXCELで実行できるVBAマクロです。
そのままコピーしてEXCELのVisualBasicEditorに貼り付ければ使えます。
プログラム中のlngNの値*1を変えると、その値を最大値とする範囲で素数を探して表示します。*2
どうということのないプログラムですが、自分で作って動かしてみたらわりと楽しかったので公開してみました。


簡単なことでも実際に自分の手を動かしてやってみる、というのは大切なことのように思います。

*1:ここでは100になっています。Long型なので扱える最大の値は2147481647ですが、実際にここまで大きい値での計算は無理でしょう。また10区切りで改行しているので655360までは動くはずですが、やたらと時間がかかるか止まるかすると思います。"おとなしい"値で動かすことをお奨めします。

*2:表示の仕方はかっこ悪いですが、気にしないでください…。