Zum Inhalt springen

Diskussion:Primzahlen: IIIa. Kapitel: Primzahlbestimmung

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Abschnitt hinzufügen
Aus Wikibooks

Verbesserungsmöglichkeiten des konsequenten Durchtestens

[Bearbeiten]

Im angeblich verbesserten Programm wird erst die Moduloberechnungen durch 2 und 3 durch zwei Moduloberechnungen durch 6 ersetzt [t2 = ((n-1)//6)*((n+1)//6)], was etwa derselbe Rechenaufwand ist. In der Schleife [do i = 2 to sqrt(n)] werden dann trotzdem die Divisionsreste durch alle ganzen Zahlen bis sqrt(n) einschließlich 2 und 3 sowie deren Vielfache geprüft. Die Verbesserungen sparen also keinen Aufwand und beeinträchtigen stattdessen die Lesbarkeit.

Programmversion von 2006 bis 2025:

do forever
  say "Bitte gib eine natürliche Zahl ein (Programm beenden mit 0):"
  pull n
  if (n = 0) then leave
  t = 1
  t2 = ((n-1)//6)*((n+1)//6)
  t3 = (n-2)*(n-3)
  if ((n > 3) && (t2 = 0)) then do
    t = 0
    do i = 2 to sqrt(n)
      if ((n // i) = 0) then t = 1
    end
  end
  if (t3 = 0) then t = 0
  if (t = 0) then say "Die Zahl "||n||" ist eine Primzahl"
  if (t = 1) then say "Die Zahl "||n||" ist keine Primzahl"
end


Hardy42 21:12, 5. Jul. 2025 (CEST)Beantworten