• ベストアンサー

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

PC上で奇素数を発生させるソフトはありますか? パソコン上で奇素数: 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, ・・・ を自動的に発生させるプログラム・ソフトは,何かありますか? 例えば,1000 という数値を指定して,p<1000 となる奇素数 p の すべてを数列 3, 5, 7, ・・・ のようにパソコン上で 発生させることは出来るでしょうか? ご存知の方,教えて下さい.よろしくおねがいします.

質問者が選んだベストアンサー

  • ベストアンサー
  • kabaokaba
  • ベストアンサー率51% (724/1416)
回答No.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;} }

Knotopolog
質問者

お礼

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

その他の回答 (3)

  • ziziwa1130
  • ベストアンサー率21% (329/1546)
回答No.3

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

Knotopolog
質問者

お礼

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

  • banakona
  • ベストアンサー率45% (222/489)
回答No.2

#1です。 大切なことを言い忘れました。割っていく数(3,5,7、・・・)は奇数でOKです。 素数にする必要はありません(素数を表示するプログラムに、素数が必要なんて 変ですしね!)。 この方法は結構ムダがある(例えば、3で割り切れなかった場合は、9で割り切れない のは明らか)のですが、プログラムにする場合は、単純な方法の方が早い 場合があります。 実際、奇数の中から3の倍数をよけて割っていく素因数分解のプログラムを 組んだことがありますが、単純に奇数で割っていく方が計算が早かったです。 割られる方の数qも、高々1000程度であれば、単純に奇数にするのをお勧めします。 3の倍数をよけたり5の倍数をよけたりしない方が、プログラムがシンプルになって ミスもしにくくなります。

Knotopolog
質問者

お礼

ご回答,有り難う御座いました.

  • banakona
  • ベストアンサー率45% (222/489)
回答No.1

できますよ。 原始的な方法ですが、素数か否かの判定をする奇数を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, ・・・ のように表示できます。

Knotopolog
質問者

お礼

ご回答,有り難う御座いました.