(Gast)
n/a Beiträge
|
probedivision -abbruch von schleife funktioniert nicht
8. Okt 2009, 19:00
ich möchte folgende proceudre (probedivision)abrrechen und mit dem restlichen code weitermachen, doch wieso kann ich die schleife nicht beenden, wenn die abbruchbedingung erreicht ist?
Delphi-Quellcode:
function tform1.miller_rabin(n: ansistring; t: longint):boolean;
label l;
var
n1,n2, y, r, x: string;
s,j,i: longint;
const
primes: array[1..5] of string=(' 2',' 3',' 5',' 7'); //in meinem fall deujtlich größer
// probedivison
function probedivision(n:ansistring):boolean;
var
I:longint;
begin
i:=1;
result:=true;
while i<=5 {9549} do
begin
if mathe.modulo(n,primes[i])=' 0'
then
begin
result:=false;
break;
end
else i:=i+1;
end;
end;
begin
result := false;
if Mathe.istGerade(n)
then exit;
begin
{get n1 = n - 1}
{get n2 = n - 2}
if probedivision(n)=true
then
begin
n1 := n;
Mathe.Minus1(n1);
n2 := n1;
Mathe.Minus1(n2);
{calculate r,s with n-1=2^s*r}
r := n1;
s := 0;
while Mathe.istGerade(r) do
begin
r := Mathe.Quotient(r,' 2');
inc(s);
end;
while t>0 do
begin
{generate a in the range 2<=a<n-1, calculate y = a^r mod n}
y := Mathe.Zufallszahl(' 2', n2);
y := Mathe.PotenzModulo(y,r,n);
{if y<>1 and y<>n-1 do}
if (y<>' 1') and (y<>n1)
then
begin
j := 1;
while (j <= s-1) and (y<>n1) do
begin
y := Mathe.ProduktModulo(y,y,n);
{if y=1 then composite}
if y=' 1'
then exit;
inc(j);
end;
{if y<>n1 then composite}
if y<>n1 then exit;
end;
dec(t);
end;
{probably prime now}
result := true;
end;
end;
end;
|
|
Zitat
|