![]() |
AW: Primzahlen
Zitat:
hab noch nicht so'n großes Repertoire an Funktionen :) Zitat:
|
AW: Primzahlen
Um bei deinem Code zu bleiben und weiters da du noch am Lernen der Sprache bist, hier ein paar nützliche Tipps
Delphi-Quellcode:
function IsPrime(a: integer): Boolean;
var b, i: integer; begin if a <= 1 then Result := False // Anmerkung: Result entspricht "IsPrime" (Funktionsname) und ist somit der Rückgabewert (hence result!) else begin b := a; Result := True; while b > 2 do // hier lag der Fehler, der dir ja schon aufgefallen ist... begin b := b - 1; i := a mod b; if i = 0 then // setzt den Rückgabewert wieder auf null (ist keine Primzahl) wenn ohne Rest teilbar begin Result := False; Break; // break bricht die aktuelle Schleife ab; Exit verlässt eine Function/Procedure end; end; end; end;
Delphi-Quellcode:
MfG
(* Mein Senf; musst du dir nicht geben... *)
function IsPrime2( X: Integer ): Boolean; var D: Integer; begin { Die Wahrscheinlichkeit, dass bei einer Divison mit einem kleinen Divisor der Rest 0 ist, ist größer als bei einem großen Divisor - folglich lassen wir denn Divisor von 2 bis (x-1) steigen und nicht umgekehrt @Forum - Kann einer diesen Gedankenvorgang bestätigen, bin mir iwie gar nicht mehr so sicher =| (7 Dosen Energydrinks.. Konzentration lässt nach xD) } Result := False; if X > 2 then begin D := 2; repeat if X mod D = 0 then Exit; // Brich die ganze Funktion ab (Rückgabewert ist False -> Siehe erste Zeile) inc( D ); // inc macht folgendes --> "D := D + 1" (ist eine Procedure, die eine Variable entgegen nimmt) until D = X; Result := True; end; end; |
AW: Primzahlen
Aus Performancegründen kann man die Prüfung auf diesen Bereich einschränken
Code:
denn
1 < n <= X div 2
Code:
für {X div 2 < n < X} gilt X mod n <> 0
|
AW: Primzahlen
Delphi-Quellcode:
function isPrime(a: integer): Boolean;
begin result := isPrimeRek(a, 2); end; function isPrimeRek(a, Teiler: integer): Boolean; begin if (a mod Teiler = 0) then result := false else if (Teiler < Round(Sqrt(a)) + 1) then result := isPrimeRek(a, Teiler + 1) else result := true; end; |
AW: Primzahlen
Zitat:
Code:
beschränkt werden....
1 < n < Sqrt(X) + 1
|
AW: Primzahlen
Zitat:
|
AW: Primzahlen
Richtig, ich hab alles was ich wollte ;)
Vielen, vielen Dank trotzdem für alle eure Antworten, sind doch alle recht übersichtlich und nachvollziehbar, und definitiv eine Bereicherung :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 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 by Thomas Breitkreuz