16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"素数を求める関数"
この発言に対し以下のコメントが寄せられています
#00950 ぜえた さん RE:素数を求める関数
みなさんこんにちは。
素数を求める関数(手続き)を作ってみました。実行速度は1000回呼び出して11秒程度
です(Winchip2-240)、難点は、大きな数は求められないことです(Max = 65535)
procedure Sosu(var intArr :array of Integer);
var
sosuflag:array[word]of boolean; //素数かどうかを判定するフラグ
i,j :Integer;
begin
fillchar(sosuflag,SizeOf(Sosuflag),1);
//まずすべての数を素数と見なしてから後で、割り切れるものをはじく。
i := 2; //素数の最小値
repeat
j := i ; inc(j,i);
while j <= $FFFF do begin
sosuflag[j] := false; //iの倍数なので素数ではない
Inc(J,I);
end;
repeat
Inc(i);
until sosuflag[i]; //次に小さい素数を探す
until i > $8FFF;
j := 1;
for i := 0 to High(IntArr) do begin
repeat
inc(j);
if j > $FFFF then
raise Exception.Create('大きすぎて素数が求められません');
until sosuflag[j];
IntArr[i] := J;
end;
end;
使用例 素数を 100個求める。
procedure TForm1.Button1Click(Sender: TObject);
var a:array[1..100]of Integer; //欲しい個数分のInteger配列
i:Integer;
begin
sosu(a);
//素数を求めて
for i :=1 to 100 do
ListBox1.Items.Add(IntToStr(a[i]));
//リストボックスに表示
end;
99/09/28(火) 16:03 べあ(BYI15773)
Original document by べあ 氏 ID:(BYI15773)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|