• ベストアンサー

素数を求める方法。

2から1000までの、素数を求めるスクリプトを作るとしたら、あなたはどういうモノを作りますか?

noname#15164
noname#15164
  • CGI
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#エラトステネスの篩 by Perl $max = 1000;#1000までの素数 $prime[$count++]=2; print "2\n"; N_LOOP: for($n=3;$n<=$max;$n+=2){ for($i=0;$prime[$i]*$prime[$i] <= $n;$i++){ next N_LOOP if($n % $prime[$i] == 0); } $prime[$count++]=$n; print "$n\n"; }

noname#15164
質問者

お礼

私も、求まりました♪ こんなにすっきりするんですねー。 2,3日試行錯誤して、どうにかなったのですが、これほど短くはなりませんでした。(w; これからも、自分の勉強もかねて、アルゴリズムっぽい質問をしたいと思います。感謝感謝♪ 自前のスクリプトはなんか恥ずかしいので、アップしません。(笑 でも、いつかきちんとしたものを、アップしようかと。

その他の回答 (2)

  • akekou
  • ベストアンサー率19% (12/63)
回答No.2

エラトステネスの篩。 配列のデータ長が長くなるというなら、boolean型にするか、各配列の要素のbitを数字に当てはめて使うか、どちらかですね。 エラトステネスの篩を使ったことが無いようなので、int型で0,1を用いboolean型のように扱ってみるのが適切かと。

  • akirameta
  • ベストアンサー率37% (19/51)
回答No.1

エラトステネスの篩い。

noname#15164
質問者

補足

エラトステネスのふるい をそのままスクリプトにするとかえって難しくなりませんか? 一度、巨大な配列を作らないとダメだし、その後のふるい落とす処理も、私には面倒に感じます。 でも、逆にエラトステネスのふるいの方法でスクリプトを書いて頂けると、勉強になります。 Perlでも、PHPでもOKです。(w

関連するQ&A

  • 1から100の数字から任意の数Xを早く見つける方法

    箱に1から100までの数字が書いてある紙がごちゃ混ぜに入っている時 そこから任意の数Xを逸早く見つけ出す方法は どのようなモノがありますか?

  • シェルスクリプト(.sh)で、10進数文字を16進数へ変換したい

    shスクリプトについて質問です。 10進数の0~15までが入った配列の値を、 10~15だけ、16進数のA~Fに変えたいです。 trコマンドで、"[:digit:]"っていうのがあったのですが、 全く使い方が見当たりませんでした^^; 何か一例いただけないでしょうか^^; 別にtrコマンドでなくても良いので、 どのようにすれば、shスクリプト内でやりたい事が できるか、教えていただけないでしょうかm(__)m

  • 固定の文字数

    お世話になっております。 複数(仮に6つ)個のファイルがあり、その各ファイルには1~10行まで文字が書かれています。書かれている文字はいつも固定の文字数です。 例えば、その固定の文字数を超えた場合にスクリプトから「文字数を超えているので、[超えた文字の行数 または 文字の超えた行の箇所をエラーとして出力]を確認して下さい。」というスクリプトを作成したいのです。 上記のスクリプトを作成する事は可能でしょうか?どなたかご存知の方がおられましたら、ご教授の程、宜しく御願い致します。

  • Flash-数を数えるムービーを作りたい

    Flashで (1)これまで宝くじに当たった人の数は何人だと思いますか? とかなんとか聞いて たらららららららららららららと数が上がっていって 10000人!とかってやりたいのですが その作り方を教えて頂けないでしょうか。 アクションスクリプトを書いてくださったり 教えてるサイトのリンクなどを教えてくださると助かります。 そんな単純じゃねぇよという場合はそうおっしゃってください。 よろしくお願いします。

  • 2進数を10進数にする方法

    2進数を10進数にする。 またその逆の10進数を2進数にした時の値の2つが 知りたいのです。 00010100だと10進数では20になりますよね。 この位なら、良いのですけど、 11010110見たいに複雑になってくると解りません。 言語が関係あるか解りませんがC言語しか使えません。

  • 3進数と7進数を足して8進数で答える方法

    質問内容はタイトルの通りです! 002012)3進数 +) 0266)7進数 を8進数5桁で答えよ って問題なのですが この問題を早く解けるような計算の仕方を教えて欲しいです!

  • 10進数1.0560を二進数にする方法を教えてくだ

    10進数1.0560を二進数にする方法を教えてください。

  • AWKのフィールドセパレータの数

    こんにちわ フィールドセパレータの数を数えるシェルスクリプトについて質問 させていただきます。 AAAAA:BBBBBB:CCCCCCC ↑まず、このようなデータがあるとします。 このデータのフィールドセパレータを":"とします。 この":"の数を数えるスクリプトを作成するのに悩んでおります。 初心者丸出しの質問で申し訳ありませんが、よろしくお願いします。

  • windowsサーバのCore数を調べる方法

    Windowsのサーバ機におけるCore数を調べたいです。 以前のQ&Aを閲覧したところ、 「Setコマンド」によるNumer Of ProcessrosにCPU数が表示されることを知りました。 ではCore数はどのように調べたら良いでしょうか? 調査対象の台数が多く(およそ800台)ため、個々に画面を開いてプロパティタブを確認する、 といった方法は避けたいです。 できればスクリプトやコマンド等を作成して、自動化したいと思います。 お知恵を拝借したく、よろしくお願い致します。

  • 28より大きい完全数を求める方法

    その数が完全数かどうかを判定するのは容易にできますが、 ある数よりも大きい自然数の中で、最小の完全数を見つけたい場合、 そのすべてを調べて行く方法以外に良い方法はありますか? 方程式を作ってみようとしましたが、上手くいきません。 ヒントだけでも良いのでお願いいたします。