EXCEL VBAによる、素数リストの作成コード。
1万以下の素数一覧が欲しかったので作りました。
「1万以下」という範囲を変えたい場合は、コードの最初のConst tmpの値を変えて下さい。
ただし、より広い範囲でリストを作る場合のLong型の限界、配列サイズの限界、実行速度などについては考慮していません。
<プログラムの概要>
・ワークシートのA列に素数のリストを出力します。
・いわゆるエラトステネスの篩(http://goo.gl/Xxqfc)によって素数を判定しています。
・1万以下の素数について、http://www.ysr.net.it-chiba.ac.jp/yashiro/sosu/ のリストと一致することを確認しています。
<コード>
Const tmp = 10000
Sub makePrimeList()
Dim n() As Long '下記(ReDim)参照
Dim p() As Long '素数のリスト
Dim UpperBound As Long '対象範囲
Dim i As Long
Dim j As Long
Dim PrimeCount As Long
UpperBound = tmp
ReDim n(UpperBound, 1)
' フィールド1が自然数、フィールド2が0のものが素数
' 例:n(7,0)=7,n(7,1)=0 : 7は素数
' n(8,0)=8,n(8,1)=1 : 8は素数でない
ReDim p(UpperBound)
For i = 0 To UpperBound
n(i, 0) = i
n(i, 1) = 0
Next
'0,1は素数でない
n(0, 1) = 1
n(1, 1) = 1
PrimeCount = 0
For i = 2 To UpperBound
If n(i, 1) = 0 Then
PrimeCount = PrimeCount + 1
p(PrimeCount) = i
j = i
Do While j <= UpperBound
n(j, 1) = 1
j = j + i
Loop
End If
Next
[A:A].ClearContents
For i = 1 To PrimeCount
Cells(i, 1).Value = p(i)
Next
End Sub
0 件のコメント:
コメントを投稿