Problem bei meiner Implentierung des Miller-Rabin Tests
Wie schon im Titel erwähnt, findet meine Implentierung von dem Miller-Rabin Primzahltest leider nicht jede Primzahl.
Das liegt leider an meiner Implentierung des Algos, ich kann aber absolut nicht den Fehler finden.
Delphi-Quellcode:
function Bin(Int: Integer): String;
VAR i : Integer;
begin
Result := '';
for i := 7 downto 0 do
Result := Result + IntToStr((Int shr i) and 1);
end;
function modular_exponentiation(a,b,n : integer) : integer;
VAR c, d, i : integer;
b_bin : string;
begin
c := 0;
d := 1;
b_bin := Bin(b);
for i := Length(b_bin) downto 1 do
begin
c := 2*c;
d := (d*d) mod n;
IF (b_bin[i] = '1') THEN
begin
d := (d*a) mod n;
Inc(c);
end;
end;
Result := d;
end;
function witness(a, n : integer) : boolean;
VAR f, x, i, t, u : integer;
begin
Result := False;
// n-1 = 2^t * u
t := 0;
u := n-1;
while ((u mod 2) = 0) do
begin
u := Round(u/2);
Inc(t);
end;
x := modular_exponentiation(a, u, n);
for i := t downto 1 do
begin
f := x;
x := (f*f) mod n;
IF (x = 1) AND (f <> 1) AND (f <> n-1) THEN
begin
Result := True;
end;
end;
IF NOT Result THEN
Result := (x <> 1);
end;
function Miller_Rabin(n, s : integer) : boolean;
VAR i : integer;
begin
Result := True;
Randomize;
for i := 1 to s do
begin
IF (witness((Random(n-1) + 1), n)) THEN
Result := False;
end;
end;
Bei der Implentierung habe ich mich an
diesen Pseudocode gehalten.
Ich freue mich jetzt schon über jede Antwort... THX.