das problem mit der endlosschleife von:
Delphi-Quellcode:
repeat
help := random(46340);
until isPrime(help);
wurde ja schon angesprochen. wenn du es so machen willst solltest du wenigstens die geprüften zahlen aus der menge der zahlen von 0..46340 rausstreichen indem du sie zum beispiel in ein array oder stringlist schreibst und bei jedem schleifen durchlauf prüfst, ob die zahl bereits getestet wurde. aber selbst das ist verschwenderisch programmiert.
und zu dem isPrime test:
Delphi-Quellcode:
function TRSA.isPrime(x: Integer): Boolean;
var i, t: integer;
begin
t := round(sqrt(x));
for i := 2 to t do
if x mod i = 0 then
begin
result := false;
exit;
end;
result := true;
end;
ist zwar auch nicht perfekt aber immerhin nur sqrt(x) schleifendurchläufe statt x.
ich hab auch mal nen primzahl generator gemacht...dabei hatte ich ein array of boolean genommen und jeden array index geprüft ob es eine primzahl ist, wenn ja array[index] := true, wenn nein := false. dann könntest du am ende alle true-werte in ein neues array schreiben und dann neues_array[random(high(neues_array)] machen. dann wird dir eine zufällige primzahl ausgegeben.