Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

@Nepumuk

Forumthread: @Nepumuk

@Nepumuk
16.12.2005 11:31:30
tubias
Hallo Nepumuk
habe hier einen Beitrag von dir gefunden:
https://www.herber.de/forum/archiv/556to560/t559952.htm
Wollte mal fragen warum du beim prüfen einer Zahl auf Prim in 10er Schritten arbeitest:
'Diese Funktion prüft Zahlen, ob diese Prim sind oder nicht

Private Function IsPrim(ByVal lng_pruefziffer As Long) As Boolean
Dim lng_counter As Long
If lng_pruefziffer Mod 3 = 0 Then Exit Function
If lng_pruefziffer Mod 7 = 0 Then Exit Function
For lng_counter = 10 To CLng(lng_pruefziffer ^ 0.5) Step 10
If lng_pruefziffer Mod (lng_counter + 1) = 0 Then Exit Function
If lng_pruefziffer Mod (lng_counter + 3) = 0 Then Exit Function
If lng_pruefziffer Mod (lng_counter + 7) = 0 Then Exit Function
If lng_pruefziffer Mod (lng_counter + 9) = 0 Then Exit Function
Next
IsPrim = True
End Function

Soll das schneller sein als wenn man das so machen würde wie in Wikipedia beschrieben?
wurzel_n = CLng(sqrt(n))
do i=2 to wurzel_n
if (n mod i = 0) then composite = 1
while
mfg tobias
*** http://www.tubias.de ***
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: @tubias
16.12.2005 13:54:03
MichaV
Hallo,
ohne genau zu wissen, was Nepumuk da macht:
Nepumuks For lng_counter = 10 To CLng(lng_pruefziffer ^ 0.5) Step 10
entspricht do i=2 to wurzel_n , aber halt in Zehnerschritten, ist also schonmal 10x schneller.
Nun jat er zwar 3 Prüfungen auf MOD mehr drin, damit ist sein Code aber immernoch ca. 10/3, also ca. 3x schneller als der Wikipedia- Code.
Gruß- Micha
PS: Rückmeldung wäre nett.
Anzeige
Mod 9 ?
16.12.2005 15:05:18
tubias
Hallo
ja, aber warum zuerst:
If lng_pruefziffer Mod 3 = 0 Then Exit Function
If lng_pruefziffer Mod 7 = 0 Then Exit Function
?
Und warum Mod 9? 9 ist doch gar keine Primzahl. Oder wie oder was?
mfg tobias
*** http://www.tubias.de ***
Anzeige
AW: Mod 9 ?
16.12.2005 16:10:31
Nepumuk
Hi,
im ersten Schritt ist lng_counter 10. Es wird auf 10+1 10+3 10+7 und 10+9 geprüft. Im zweiten Schritt ist lng_counter 20 usw. Ein Primzahl kann als letze Ziffer keine 2 4 6 8 0 und 5 haben. Der Wikepediacode prüft auf 2 3 4 5 6 7 ..... also 10 mal, wo ich nur 4 mal prüfe. Das ganze ist ein bisschen aus dem Zusammenhang gerissen. Denn, soweit ich mich erinnern, werden gerade Zahlen und Zahlen die mit 5 enden gar nicht an die Routine geschickt. Das ganze darum ergänzt, sieht dann so aus:
Private Function IsPrim(ByVal lng_pruefziffer As Long) As Boolean
    Dim lng_counter As Long
    If lng_pruefziffer Mod 2 = 0 Then Exit Function
    If lng_pruefziffer Mod 3 = 0 Then Exit Function
    If lng_pruefziffer Mod 5 = 0 Then Exit Function
    If lng_pruefziffer Mod 7 = 0 Then Exit Function
    For lng_counter = 10 To Clng(lng_pruefziffer ^ 0.5) Step 10
        If lng_pruefziffer Mod (lng_counter + 1) = 0 Then Exit Function
        If lng_pruefziffer Mod (lng_counter + 3) = 0 Then Exit Function
        If lng_pruefziffer Mod (lng_counter + 7) = 0 Then Exit Function
        If lng_pruefziffer Mod (lng_counter + 9) = 0 Then Exit Function
    Next
    IsPrim = True
End Function

Wenn du einmal auf zwei geprüft hast, musst du nicht auf 4 6 8 ... prüfen, da alle diese Zahlen auch durch zwei teilbar sind. Genauso ist es mit 5. Jede Zahl die mit 5 endet ist durch 5 teilbar.
Gruß
Nepumuk

Anzeige
AW: Mod 9 ?
16.12.2005 17:12:52
tubias
Hallo
Danke für die Antwort. Werde ich mal testen bzw. nachvollziehen.
mfg tobias
*** http://www.tubias.de ***
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige