1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • 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
  • anfänger_engel
    1
    anfänger_engel
    Mitglied
    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 :grinning_face_with_smiling_eyes:

  • Trux
    12
    Trux
    Mitglied
    Reaktionen
    26
    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
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 10. April 2008 um 17:40
    • #3

    Eher bis zur Wurzel.

  • viper
    4
    viper
    Mitglied
    Reaktionen
    3
    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.

    100% trivial :thumb:

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung