AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi unerklärlicher fehler bei nichtprimzahl-test

unerklärlicher fehler bei nichtprimzahl-test

Ein Thema von Lindworm · begonnen am 17. Okt 2005 · letzter Beitrag vom 19. Okt 2005
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Re: unerklärlicher fehler bei nichtprimzahl-test

  Alt 19. Okt 2005, 15:03
Hi Hagen,
hm, okay, verstanden worum es dir geht und mir sind auch ein paar Sachen etwas klarer geworden. Und entschuldige, wenn ich ein wenig giftig geantwortet habe.

Zitat:
Aber sicher doch, nämlich die mathematische Sicht. Wenn man schreibt A^(n-1) == 1 mod N dann zeigt dies an das man in einer Kongruenzklasse arbeitet, in einem modularem Restering. Das bedeutet technisch zB. das man auf der Linken Seite alles mod N rechnen kann, in jedem Schritt. Statt also 3^999 komplett ausrechnen zumüssen kann man auch (((((3*3 mod N) * 3) mod N * 3) mod N ... usw. rechnen. Dies produziert ausgehend von der mathematischen Schreibweise eine komplett andere technische Umsetzung.
Das ist mir erst ganz am Ende meines Postings eingefallen. Und das ist der entscheidende Punkt. Wäre also folgende Funktion doch eigentlich wesentlich optimierter, weil sie 1. nicht auf Fließkommazahlen aufbaut und 2. die Rechenarbeit verringert. Oder habe ich noch etwas vergessen?
Delphi-Quellcode:
function PowerMod(Base, Exponent, Modul: longint): longint;
var
  idx: longint;
begin
  Result := -1;
  if (Exponent < 0) then Exit;

  Result := 1;
  for idx:=1 to Exponent do begin
    Result := (Result * Base) mod Modul;
  end;
end;

function IsNotPrime(a, n: longint): boolean;
begin
  Result := PowerMod(a, n-1, n) <> (1 mod n);
end;
Zitat:
fakt ist das obige Lösung als Umsetzung der Fermatschen Formel absolut untauglich ist
Okay, ich habe vorhin selber gesehen, wie schnell die kleinen Zahlen bei Real oder anderen Float-Typen sehr ungenau werden. Ich war mir vorher gar nicht darüber bewusst wie schnell das passiert. Und das deswegen das Ergebnis schnell daneben liegen kann.

Zitat:
Gäbe es eine weitere Unterscheidung, als nur die Negation des Resultates, zwischen Primzahl-Test und Nicht-Primzahl-Test so würde dies bedeuten das es nicht nur Primzahlen und Zusammengesetzte Zahlen gibt sondern noch eine dritte oder vierte Form. Dies ist zum Glück nicht der Fall (oh und bitte wir reden bekanntermaßen von Ganzzahlen und nichts anderem) also ist es wurscht ob man eine Zahl auf Primzahl testet oder auf Nicht-Primzahl, in beiden Fällen wird man bei einer 100% richtigen Aussage der Funktion wissen um welchen Typus es sich handelt
Naja, wenn aber nun der Test sagt "false" (also die Zahl ist nicht keine Primzahl), dann heißt das doch noch nicht, dass sie automatisch eine Primzahl ist, oder?

Chris
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz