Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
@MatWur:
Toll! Jetzt habe ich auch wieder was dazugelernt!
Danke... :hi:
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
@MatWur:
Erkennt der Compiler also beim Kompilieren das x nicht verändert wird!?
Kann man das irgendwie nachlesen?
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
Kein Problem :wink:
Freut mich wenn ich dir helfen konnte ...
Gruß
Chris P
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
Probier mal:
var
t, x, Count: Int64;
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
Freut mich!
Wenn du meine Variante einigermaßen nachvollziehen kannst, kannst du dich ja
mal an den Fermat versuchen. Das wäre dann die nächste Verbesserung.
P.S: Mit Int64 sollte es ebenfalls ohne Probleme gehen. Ersetze einfach Cardinal durch Int64.
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
Ich bin mir nicht sicher ob der Compiler das weiß, ob x innerhalb der Schleife verändert wird.
Ich denke, es wird bei jedem Durchlauf erneut berechnet.
Auf jeden Fall sind meine und deine Variante möglich.
Nur ich persönlich versuche Fließkommazahlen zu vermeiden wo es geht.
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
Das mag ja sein nur du rufst in jedem Schleifendurchlauf floor(...) und sqrt(...) auf.
Außerdem ist sqrt ungenau da es mit Fließkommazahlen arbeitet.
Das hat man bei bei meiner Lösung nicht.
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
@MatWur: Danke für die ergänzende Erklärung :thumb:
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
So habe ich das gelöst:
function IsPrime(const Value: Cardinal): Boolean;
var
t: Cardinal;
begin
if (Value = 2) then
begin
Result := TRUE;
Exit;
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by Chris P,
28. Feb 2007
Hi,
also erstens brauchst du nur ungerade Teiler zu testen und zweitens schickt es wenn die for-Schleife
nur bis Wurzel aus x läuft, denn x = Wurzel(x) * Wurzel(x).