Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
708to712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
708to712
708to712
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

@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 ***

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.
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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige