1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Primzahlen in VBA ausrechnen?

    • Frage
  • anfänger_engel
  • 10. April 2008 um 17:21
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • anfänger_engel
    Punkte
    10
    Beiträge
    1
    • 10. April 2008 um 17:21
    • #1

    Also ich habe jetzt eine Funktion gemacht mit der ich Primzahlen ermitteln kann und ich gehe mal davon aus, dass sie stimmt...(siehe weiter unten...)
    Mein eigentliches problem ist, wie kann ich die Funktion Prim() beschleunigen, indem nicht so viel unnütz gesucht wird?
    Muss bei der Untersuchung, ob 197 eine Primzahl ist, wirklich getestet werden, ob 196 ein Teiler ist?
    Wie groß kann der größte echte Teiler denn höchstens sein?
    Kann vielleicht noch ein bisschen „früher“ festgestellt werden, dass es gar keinen echten Teiler gibt und die Zahl daher eine Primzahl ist?


    Option Explicit
    Function IstPrim(zahl As Integer) As Boolean
    Dim i As Integer
    IstPrim = True
    If zahl <= 1 Then
    IstPrim = False
    Else
    If (zahl Mod 2) = 0 Then 'Gerade Zahl
    IstPrim = False
    Else 'Ungerade Zahl
    For i = 3 To zahl - 1
    If (zahl Mod i) = 0 Then 'Teiler i gefunden
    IstPrim = False
    End If
    Next
    End If
    End If
    End Function


    Bitte um Hilfe! Ich möchte auch irgendwann einmal ein Profi sein ^^

  • Trux
    Punkte
    1.396
    Beiträge
    274
    • 10. April 2008 um 17:36
    • #2
    Zitat von anfänger_engel

    Muss bei der Untersuchung, ob 197 eine Primzahl ist, wirklich getestet werden, ob 196 ein Teiler ist?


    nein. du musst nur bis zur wurzel der zahl gehn

  • Ringding
    Punkte
    1.237
    Beiträge
    244
    • 10. April 2008 um 17:40
    • #3

    Eher bis zur Wurzel.

  • viper
    Punkte
    103
    Beiträge
    20
    • 10. April 2008 um 17:41
    • #4
    Zitat von anfänger_engel

    wie kann ich die Funktion Prim() beschleunigen, indem nicht so viel unnütz gesucht wird?

    Dafür gibt es einige Ansätze (siehe z.B. http://de.wikipedia.org/wiki/Primzahltest), die mit mehr oder weniger Aufwand verbunden sind.

    Zitat

    Wie groß kann der größte echte Teiler denn höchstens sein?

    Der größte mögliche Teiler einer Zahl p (außer p selbst) ist [tex='\lfloor\sqrt{p}\rfloor'][/tex]

    , d.h. die größte ganze Zahl, die kleiner oder gleich die Wurzel von p ist.
    Eine andere Schranke (wenn du sqrt() nicht aufrufen willst), ist [tex='\frac{p}{2}'][/tex]

    .

    Du kannst deinen Algorithmus auch beschleunigen, indem du z.B. gerade Zahlen größer als 2 beim Test überspringst (also bei 61 würdest du 2, 3, 5 und 7 probieren, aber nicht 4 oder 6). Im Allgemeinen kann man alle Zahlen, die keine Primzahlen sind, überspringen; jedoch müsste man dafür schon eben eine Liste von Primzahlen haben, auf der man schnell zugreifen kann.

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum