「指定範囲の素数を返す関数」を作ってみましょう。今回は 開始値と終了値を引数に渡して、その範囲内の素数を配列で返す 関数です。
サンプルコード
Function GetPrimesInRange(ByVal startNum As Integer, ByVal endNum As Integer) As Variant
Dim arr() As Integer
Dim temp() As Integer
Dim i As Integer, j As Integer
Dim isPrime As Boolean
Dim count As Integer
' 一時的な配列を最大サイズで確保
ReDim temp(1 To endNum)
count = 0
For i = startNum To endNum
If i >= 2 Then
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
End If
Next i
' 必要なサイズで配列を作り直す
ReDim arr(1 To count)
For i = 1 To count
arr(i) = temp(i)
Next i
GetPrimesInRange = arr
End Function
VB呼び出し例
Sub TestPrimesRange()
Dim primes As Variant
Dim i As Integer
primes = GetPrimesInRange(10, 50) ' → {11,13,17,19,23,29,31,37,41,43,47}
For i = LBound(primes) To UBound(primes)
Debug.Print primes(i)
Next i
End Sub
VB解説
startNumとendNumを引数に渡すことで範囲を指定- 素数判定は「2~√nまで割り切れるか」をチェック
- 一時配列
tempに素数を格納し、最後に必要なサイズの配列に詰め直して返す - 呼び出し例では 10~50の素数が返る
応用ポイント
- 範囲を自由に指定できるので「100~200の素数」なども簡単に取得可能
- 素数のリストを返すだけでなく「素数の個数」や「合計値」を返す関数に発展させられる
👉 次のステップとして「指定範囲の素数の合計値を返す関数」に挑戦すると、さらに実用的になります。
