「指定した数までの素数を返す関数」を作ってみましょう。素数とは「1と自分自身以外では割り切れない数」のことです。
サンプルコード
Function GetPrimes(ByVal maxNum As Integer) As Variant
Dim arr() As Integer
Dim i As Integer, j As Integer
Dim isPrime As Boolean
Dim count As Integer
' 素数の数を数えるために一時的な配列を使う
Dim temp() As Integer
ReDim temp(1 To maxNum)
count = 0
For i = 2 To maxNum
isPrime = True
' 2から√iまでで割り切れるかチェック
For j = 2 To Int(Sqr(i))
If i Mod j = 0 Then
isPrime = False
Exit For
End If
Next j
If isPrime Then
count = count + 1
temp(count) = i
End If
Next i
' 必要なサイズで配列を作り直す
ReDim arr(1 To count)
For i = 1 To count
arr(i) = temp(i)
Next i
GetPrimes = arr
End Function
VB呼び出し例
Sub TestPrimes()
Dim primes As Variant
Dim i As Integer
primes = GetPrimes(30) ' → {2,3,5,7,11,13,17,19,23,29} が返る
For i = LBound(primes) To UBound(primes)
Debug.Print primes(i)
Next i
End Sub
VB解説
For i = 2 To maxNum
→ 2から指定した数までを順番にチェックFor j = 2 To Int(Sqr(i))
→ √i までの数で割り切れるか確認(効率アップ)isPrimeが True のままなら素数として配列に追加- 最後に必要なサイズの配列に詰め直して返す
ポイント
- 素数判定は「割り切れる数があるかどうか」を調べるだけ
- √n まで調べれば十分なので効率的
- 配列を返すことで「複数の素数」をまとめて扱える
👉 この関数を応用すれば「素数の個数を返す」「素数の合計を返す」なども簡単に作れます。
