最速の素数判定アルゴリズム  

このエントリーをはてなブックマークに追加
214199
コードはとりあえず全部書いたけど、バグだらけでデバック中

とりあえず、必要だったルーチンを掲載

FFTをする為に2のベキで収まる数を求める関数
function iGTexp2(k:integer):integer; //k < 2^n となる 2^n
begin
 k:=k or (k shr 16); //ビットシフトしながらORすると
 k:=k or (k shr 8); //下位ビットが全部1になる
 k:=k or (k shr 4);
 k:=k or (k shr 2);
 k:=k or (k shr 1);
 Result:=k+1;    //1を足せば 2^nになる
end;

function iLog2(m:integer):integer; //m=2^n を与えて nを返す
begin
   if m>=$10000 then Result:=iLog2(m shr 16)+16
else if m>=$100 then Result:=iLog2(m shr 8)+8
else if m>=$10 then Result:=iLog2(m shr 4)+4
else if m>=4 then Result:=iLog2(m shr 2)+2
else if m>=2 then Result:=iLog2(m shr 1)+1
else Result:=0; //1か0 0ならエラーだけど知らない
end;