unit UNT_Primzahl;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TFRM_Primzahlenfinder =
class(TForm)
BTN_Rechnen: TButton;
EDT_zeitausgabe: TEdit;
LBL_zeitausgabe: TLabel;
LBX_Prim: TListBox;
LBL_Primzahlen: TLabel;
LBL_Primzahl: TLabel;
BTN_Close: TButton;
EDT_UG: TEdit;
EDT_OG: TEdit;
LBL_UG: TLabel;
LBL_OG: TLabel;
procedure BTN_CloseClick(Sender: TObject);
procedure BTN_RechnenClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
FRM_Primzahlenfinder: TFRM_Primzahlenfinder;
implementation
{$R *.dfm}
var zeit, uG, oG : longint;
h,m,s,ms : word;
sieb:
array [2..1000000]
of boolean;
//function teileranzahl(zahl:longint):integer;
//var teiler, partnerteiler : longint;
// anzahl : integer;
//begin
// anzahl := 2;
// teiler := 2 ;partnerteiler := zahl div teiler;
// while teiler < partnerteiler do
// begin
// if zahl mod teiler = 0 then
// anzahl := anzahl+2;
// inc(teiler); partnerteiler := zahl div teiler;
// end;
// if teiler*teiler = zahl then inc(anzahl);
// teileranzahl := anzahl;
//end;
//function prim_1(zahl:longint):boolean;
//begin
// prim_1 := teileranzahl(zahl) = 2;
//end;
procedure TFRM_Primzahlenfinder.BTN_CloseClick(Sender: TObject);
begin
close;
end;
procedure eratosthenes(obG:longint);
var index: longint;
procedure streiche_vielfache(i : longint);
{lokal deklarierte procedure, die nur
in der procedure eratosthenes
verwendet werden kann }
var k : longint;
begin
k := i+i;
while k <= oG
do
begin
sieb[k] := false;
k := k+i;
end;
end;
begin {eratosthenes}
for index := 2
to oG
do sieb[
index] := true;
{initialisieren}
index := 2;
while index*
index <= oG
do
begin
if sieb[
index] = true
then streiche_vielfache(
index);
inc(
index);
end;
end;
{eratosthenes}
procedure TFRM_Primzahlenfinder.BTN_RechnenClick(Sender: TObject);
var //zahl, teiler : integer;
uG, oG,
index : longint;
begin
decodetime(time,h,m,s,ms);
zeit := 1000*(3600*h+60*m+s)+ms;
LBX_Prim.Items.clear;
uG := strtoint(EDT_UG.Text);
oG := strtoint(EDT_OG.Text);
eratosthenes(oG);
for index := uG
to oG
do
if sieb[
index] = true
then ;
LBX_Prim.Items.add(inttostr(
index));
decodetime(time,h,m,s,ms);
zeit := 1000*(3600*h+60*m+s)+ms-zeit;
EDT_zeitausgabe.text := inttostr(zeit);
end;
end.