calculate prime number/de

From Lazarus wiki
Jump to navigationJump to search

Deutsch (de)

Zurück zur Seite Code Beispiele.


Dieses Beispiel enthält zwei Unterprogramme. Eines prüft, ob es sich bei der übergebenen Zahl um eine Primzahl handelt.

Das andere Unterprogramm ermittelt mit Hilfe des ersten Unterprogramms ein Array mit Primzahlen, dessen Start- und Endezahl der Prozedur nach Belieben übergeben werden können.

Die Funktionen laufen nur unter 64 Bit. Damit die Funktionen auch unter 32 Bit laufen, muss der Datentyp QWord durch den Datentyp Cardinal ersetzt werden.

uses
  SysUtils, ...;
  
  ...
  
implementation

  ...

// Diese Funktion prüft, ob eine Zahl eine Primzahl ist
function funIsPrim(qwdGanzzahl: QWord): boolean; inline;
var
  qwdI: QWord;

begin

  Result := False;

  for qwdI := 2 to Round(Sqrt(qwdGanzzahl)) do
    if qwdGanzzahl mod qwdI = 0 then
      exit;

  Result := True;

end;

// Diese Funktion ermittelt alle Primzahlen aus einem bestimmten Bereich
procedure subPrimArray(qwdVon, qwdBis: QWord);
var
  qwdI: QWord;
  arrPrim: array of Qword;

begin

  // Legt die Anfangsgrösse des Arrays fest
  SetLength(arrPrim, 0);

  for qwdI := qwdVon to qwdBis do
  begin
    if funIsPrim(qwdI) = True then
    begin
      // ändert die Grösse des Arrays
      SetLength(arrPrim, High(arrPrim) + 2);
      arrPrim[High(arrPrim)] := qwdI;
    end;
  end;

end;

  ...