「指定範囲の素数の最大値と最小値を返す関数」を作ってみましょう。今回は 開始値と終了値を引数に渡して、その範囲内の素数の最小値と最大値を返す関数です。
サンプルコード
Function MinMaxPrimesInRange(ByVal startNum As Integer, ByVal endNum As Integer) As Variant
Dim i As Integer, j As Integer
Dim isPrime As Boolean
Dim minPrime As Long, maxPrime As Long
Dim found As Boolean
minPrime = 0
maxPrime = 0
found = False
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
If Not found Then
minPrime = i ' 最初に見つかった素数が最小値
found = True
End If
maxPrime = i ' 素数が見つかるたびに更新 → 最後が最大値
End If
End If
Next i
' 結果を配列で返す({最小値, 最大値})
Dim result(1 To 2) As Long
result(1) = minPrime
result(2) = maxPrime
MinMaxPrimesInRange = result
End Function
VB呼び出し例
Sub TestMinMaxPrimes()
Dim primes As Variant
primes = MinMaxPrimesInRange(10, 50)
MsgBox "最小の素数は " & primes(1) & vbCrLf & _
"最大の素数は " & primes(2)
End Sub
VB実行結果
- 10~50の素数は 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47
- 最小値 → 11
- 最大値 → 47
ポイント
- 最初に見つかった素数を「最小値」として記録
- その後見つかる素数で「最大値」を更新していく
- 最終的に
{最小値, 最大値}の配列を返す
👉 この関数を応用すれば「素数の最小値・最大値だけでなく、個数や合計も同時に返す関数」に発展させられます。
