Hi!
ich bin gerade dabei für ein Online Game das ich plane zu programmieren eine Authentifizierungsroutine zu schreiben.
Das Ding stützt sich dabei massiv auf SHA1 und MD5 Hashes und Eine Tabelle von Primzahlen.
Problem ist nur das ist bei jedem User Login der Planung nach 256 Primzahlen ab einer bestimmten STart Primzahl und immer nur jede Xte Primzahl generieren muss.
Sieht jemand hier bei (Pascal / Delphi) noch ein Verbesserungspotenzial um zu testen ob eien Zahl eien Primzahl ist, oder den TEst so schnell wie moglich abzubrechen wen nes keien ist oder sein kann?
Pimzahlen enden elle auf 1, 3, 7 oder 9 mit ausnahme der beiden ersten. also 2 und 5
Function ISPrime(const vlNumber: Integer): Boolean;
var
X, Y: Integer;
vlPrime: Boolean;
LastDigit: byte;
begin
vlPrime := False;
//Letze Ziffer ermitteln
LastDigit := vlNumber mod 10;
//Wenn es eine gerade Zahl ist kann es keine Primzahl sein
if LastDigit mod 2 <> 0 then vlPrime := True;
if LastDigit = 5 then vlPrime := false;
//2 und 5 sind Ausnahmen von der Regel
if vlNumber = 2 then vlPrime := True;
if vlNumber = 5 then vlPrime := True;
// Vorzeitger Abbruch der Funktion weil es keien Primzahl sein kann
if vlPrime = False then
begin
ISPrime := false;
Exit;
end;
//Falls es theoretisch eine Primzah lsein könnte
vlPrime := True;
X := 2;
// Nur bis zur Ganzzaqhligen Quadratwurzel der zu prüfenden Zahl testen weil alles darüber redundant ist
Y := trunc(sqrt(vlNumber));
While (X <= y) and (vlPrime = True) do
begin
vlPrime := ((vlNumber mod X) <> 0);
Inc(X);
end;
ISPrime := vlPrime;
end;