電子書籍の厳選無料作品が豊富!

PC上で奇素数を発生させるソフトはありますか?

パソコン上で奇素数: 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, ・・・
を自動的に発生させるプログラム・ソフトは,何かありますか?

例えば,1000 という数値を指定して,p<1000 となる奇素数 p の
すべてを数列 3, 5, 7, ・・・ のようにパソコン上で
発生させることは出来るでしょうか?

ご存知の方,教えて下さい.よろしくおねがいします.

A 回答 (4件)

昔Perlで書いたのを発掘.



perl prime.pl 10000 1000

とすると,最初から数えて10000個の素数のうち
1000未満のものを一気に出力します.
アルゴリズムとしては「エラトステネスの篩」を
少し効率化しています.


#prime.pl

use strict;
use warnings;

my $num =$ARGV[0];
my $upper =$ARGV[1];

sub primefactory{
my @primes=(2,3);
my $state=-1;
return sub{
$state++;
return $primes[$state] if $state==0 or $state==1;
my $prime_cand=$primes[-1]+2;
SIEVE:
foreach my $d (2 .. int(sqrt($prime_cand))+1){
if ($prime_cand % $d ==0){
$prime_cand++;
goto SIEVE;
}
}
@primes=(@primes,$prime_cand);
return $primes[-1];
}
}

my $x=primefactory();
foreach (1..$num){my $p=$x->();
if ($p<$upper) {print $p,"\n"}
else {last;}
}
    • good
    • 0
この回答へのお礼

ご回答をありがとうございます.
早速,検討してみます.

お礼日時:2010/04/29 16:00

ExcelのVBAでプログラムを組めばExcelのセルに表示できます。

    • good
    • 0
この回答へのお礼

ご回答をありがとうございました.
Excel は使っておりませんので,残念ながら試せませんが,
今,Risa/Asir を使って検討中です.悪しからず.

お礼日時:2010/04/29 16:06

#1です。



大切なことを言い忘れました。割っていく数(3,5,7、・・・)は奇数でOKです。
素数にする必要はありません(素数を表示するプログラムに、素数が必要なんて
変ですしね!)。

この方法は結構ムダがある(例えば、3で割り切れなかった場合は、9で割り切れない
のは明らか)のですが、プログラムにする場合は、単純な方法の方が早い
場合があります。

実際、奇数の中から3の倍数をよけて割っていく素因数分解のプログラムを
組んだことがありますが、単純に奇数で割っていく方が計算が早かったです。

割られる方の数qも、高々1000程度であれば、単純に奇数にするのをお勧めします。
3の倍数をよけたり5の倍数をよけたりしない方が、プログラムがシンプルになって
ミスもしにくくなります。
    • good
    • 0

できますよ。



原始的な方法ですが、素数か否かの判定をする奇数をqとします。
奇数のみが対象なので、qを3,5,7、・・・と順番に割っていき、
割れ切れたら「素数でない」と判定します。どこまで割るかというと、
√qまでです。√qが整数でなければ、√qを超えない最大の奇数で
OKです。だから意外と早くこの判定は終わります。

例えば、qが119なら、√119=10.9・・・なので3,5,7,9
まで調べればいい。√qまで割って割り切れなければqは素数です。
qを表示します。

qが素数か否か判定できたら、qを2増やし、また3から順に割っていきます。

以上をqが999になるまで繰り返せば、p<1000 となる奇素数 p の
すべてを数列 3, 5, 7, ・・・ のように表示できます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!