|
Die Funktion IsPrime prüft, ob eine Zahl eine Primzahl ist (d.h.
die Zahl ist nur durch 1 und durch sich selbst
teilbar).
Public Function IsPrime(ByVal Zahl As Long) As Boolean
Dim l As Long
If Zahl <> 2 And (Zahl And 1) = 0 Then
Exit Function
ElseIf Zahl <> 3 And Zahl Mod 3 = 0 Then
Exit Function
End If
For l = 6 To Sqr(Zahl) Step 6
If Zahl Mod (l - 1) = 0 Then
Exit Function
ElseIf Zahl Mod (l + 1) = 0 Then
Exit Function
End If
Next
IsPrime = True
End Function
In einer Schleife können Sie mit Hilfe dieser Funktion die
Primzahlen in jedem beliebigen Zahlenbereich innerhalb des
Wertebereichs des Datentyps Long finden. Wir haben diese
Suchschleifen für Sie in Hilfsfunktionen gepackt, die Ihnen die
gefundenen Primzahlen als Array, als Collection oder als Liste in
String-Form zurückgeben. Bei allen Funktionen geben Sie die
Obergrenze (Parameter ToNumber) und optional die Untergrenze (FromNumber,
Voreinstellung ist 1). Bei der String-Liste können Sie
optional den Trenn-String angeben (Voreinstellung ist vbCrLf) und
ebenso optional festlegen, ob die Liste mit diesem Trenn-String
enden soll (Voreinstellung ist False).
Public Function PrimeNumbersA(ByVal ToNumber As Long, _
Optional ByVal FromNumber As Long = 1) As Variant
Dim l As Long
Dim nPrimes() As Long
Dim nCount As Long
ReDim nPrimes(1 To ToNumber - FromNumber + 1)
For l = FromNumber To ToNumber
If IsPrime(l) Then
nCount = nCount + 1
nPrimes(nCount) = l
End If
Next 'l
ReDim Preserve nPrimes(1 To nCount)
PrimeNumbersA = nPrimes
End Function
Public Function PrimeNumbersC(ByVal ToNumber As Long, _
Optional ByVal FromNumber As Long = 1) As Collection
Dim l As Long
Dim nPrimes As Collection
Set nPrimes = New Collection
For l = FromNumber To ToNumber
If IsPrime(l) Then
nPrimes.Add l
End If
Next 'l
Set PrimeNumbersC = nPrimes
End Function
Public Function PrimeNumbersS(ByVal ToNumber As Long, _
Optional ByVal FromNumber As Long = 1, _
Optional Separator As String = vbCrLf, _
Optional ByVal LastSeparator As Boolean) As String
Dim l As Long
Dim nPrimes As String
For l = FromNumber To ToNumber
If IsPrime(l) Then
nPrimes = nPrimes & CStr(l) & Separator
End If
Next 'l
If Len(nPrimes) Then
If Not LastSeparator Then
nPrimes = Left$(nPrimes, Len(nPrimes) - Len(Separator))
End If
End If
PrimeNumbersS = nPrimes
End Function
Die beiden Funktionen PrimeNumbersListBox bzw.
PrimeNumbersComboBox lesen die Primzahlen des angegebenen Bereichs
in eine ListBox bzw. in eine ComboBox ein. Im optionalen Parameter
Clear geben Sie an, ob die Liste zuvor geleert werden soll
(Voreinstellung gleich True). Bei der ListBox können Sie
zusätzlich noch angeben, ob ihre Visible-Eigenschaft während des
Füllens auf False gesetzt werden soll (Voreinstellung gleich True,
d.h. die Visible-Eigenschaft wird auf False gesetzt), damit die
Aktualisierung Darstellung beim Einfügen der einzelnen Primzahlen
unterdrückt wird (Performance-Gewinn). Die Anzahl der Primzahlen
ist allerdings begrenzt auf 32.736 - mehr können eine ListBox bzw.
eine ComboBox nicht aufnehmen. Der Rückgabewert der Funktionen ist
hier die Anzahl der in die Liste aufgenommenen Primzahlen.
Public Function PrimeNumbersListBox(ListBox As ListBox, _
ByVal ToNumber As Long, Optional ByVal FromNumber As Long = 1, _
Optional ByVal Clear As Boolean = True, _
Optional ByVal HideControl As Boolean = True) As Long
Dim l As Long
Dim nCount As Long
With ListBox
If Clear Then
.Clear
End If
.Visible = Not HideControl
For l = FromNumber To ToNumber
If IsPrime(l) Then
.AddItem l
nCount = nCount + 1
If nCount > 32735 Then
Exit For
End If
End If
Next 'l
.Visible = True
PrimeNumbersListBox = .ListCount
End With
End Function
Public Function PrimeNumbersComboBox(ComboBox As ComboBox, _
ByVal ToNumber As Long, Optional ByVal FromNumber As Long = 1, _
Optional ByVal Clear As Boolean = True) As Long
Dim l As Long
Dim nCount As Long
With ComboBox
If Clear Then
.Clear
End If
For l = FromNumber To nToNumber
If IsPrime(l) Then
.AddItem l
nCount = nCount + 1
If nCount > 32735 Then
Exit For
End If
End If
Next 'l
PrimeNumbersComboBox = .ListCount
End With
End Function
|