• ベストアンサー

プログラミングと素数砂漠

素数砂漠の最大値を求めるプログラムをBASICで作りたいのですが・・ 数学もプログラミングも大の苦手で全く分かりません; どなたか知恵を貸してくださいませんか??

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

  • ベストアンサー
  • proto
  • ベストアンサー率47% (366/775)
回答No.7

まず「素数じゃなかったら」とか言ってるとだんだん混乱してくるので、「合成数」という言葉を使いましょう。 素数砂漠とは、自然数列のなかで合成数が長く続く部分ですね。 で、素数砂漠の"最大値"と言うからには、合成数がいくつ連続するか、"いくつ"という部分に興味があるわけです。 例えば1から13までなら、   1,2,3,[4],5,[6],7,[8],[9],[10],11,[12],13 と、括弧を付けた数が合成数ですね。 見たところ8から10までで3個合成数が連続しています。 それ以外の部分は1個の合成数が連続するだけです。 (1個で連続するというのも言葉としておかしくはあるが…) 結局、この場合なら素数砂漠の最大値は3というのが妥当な答えでしょう。 これだけでもかなりイメージ出来たのでは無いでしょうか? まず、『最初に素数Aを入力してもらって、A-1、A-2、・・の数を素数判定していって初めて「素数でない」という判定がでた数が素数砂漠の最大値?になるのかな』という、この方法ではダメですね。 13から始めた場合、前の13-1=12は合成数、もう一つ前の13-2=11は素数で、ここまでで判定を終了してしまうと合成数が連続するのは1個だけという事になっていしまいます。 ですが、先ほど見たように合成数が3個連続するのは8~10の部分です。 11まで調べてやめてしまってはいけないのです。 数Aを入力してもらい、1~Aまでの範囲で考えるというのは良いでしょう。 Aが大きくなれば顕著になるのですが、1~Aまでの自然数列の中で最大の素数砂漠がどこにあるのか、最初の方にあるのか最後の方にあるのか、それは調べる前にすぐ分かることではありません。 数が大きくなるほど素数の割合は減っていくので後半ほど素数砂漠が大きくなる傾向はあるのですが、Aの直前の部分が最大の素数砂漠であるとは限りません。 以上のことを踏まえてアルゴリズムを考えてください。 簡単に言ってしまえば、 ・1からAまでの数について素数か合成数かをひとつひとつ判定していく。 ・素数で区切られた区間について、合成数が連続する数を区間ごとに数える。 ・それらの中で一番大きな区間(最大の素数砂漠)の長さを出力する。 こんな感じになるでしょう。 理屈としてはこのようにすれば素数砂漠を探すことはできます。 しかしプログラミングをする上では、   Aが大きくなれば素数で区切られた区間を保持するテーブルも大きくなること   判定しようとする数が大きくなれば素数判定にかかる時間も大きくなること これらを考慮してメモリと時間を節約するアルゴリズムを考える必要があるでしょう。

min_k_may
質問者

補足

なるほど! 私は「素数砂漠の最大値」=「そこまでに存在する合成数の中で一番大きな数」だと勘違いしていたみたいです。 挙げてくださった例で言うと「12」だと思ってました。 分かりやすくて丁寧な説明ありがとうございます。 理屈は理解できました! 理屈は、なところが私の頭の残念なところですが・・ これらのことを踏まえながら考えてみようと思います。 本当にありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • tsukita
  • ベストアンサー率50% (41/82)
回答No.6

こんばんは。 ことばで表現するのが難しいようですので・・・ 例えば、あなたのプログラミングした関数(?)に 1、2、3、4、5 を入力した場合(初期値を与えた場合)の出力はどうしたいのですか?

min_k_may
質問者

補足

protoさんのアドバイスにより、自分が「素数砂漠の最大値」を勘違いしていたことに気づきました; 今頭の中にあるプログラムじゃ全然ダメなことが分かったので、もう1度考えさせてください。 とりあえず最初は自分でやってみますね。 たくさんのアドバイスありがとうございました! 分からなくなったらまたここに来ると思うので、その時はまたよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.5

>今私の頭の中にあるプログラムを書きだしなさいということですか?? そうじゃない。 例えば、素数 p をプログラムに与えて「素数砂漠」をどのようなフォーマットで得たいのですか? プログラムに与えられた数が素数でない場合はどうするのですか?

min_k_may
質問者

補足

最初に素数を入力してもらって、一応素数判定を行い、素数じゃなかった場合は「入力ミス」等の表示をしたいと思っています。 素数だった場合は、先ほど補足したように数字を1つずつ遡って素数判定をし、「素数でない」数が出たらそれが素数砂漠の最大値になるのかな?と考えたんですが・・・ よく考えてみれば、入力した素数がAでA-1も素数だとしたら素数砂漠は存在しないことになるんですかね?; プログラムを「入力した素数までに存在する素数砂漠の最大値」とすればいいんでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.4

>連続して素数が現れない部分=「素数砂漠」らしいです。 そうだとして、貴方が求めるプログラムの入力とその出力はどのようなものになりますか?

min_k_may
質問者

補足

えっと、今私の頭の中にあるプログラムを書きだしなさいということですか??

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.3

>最初に素数Aを入力してもらって、A-1、A-2、・・の数を >素数判定していって初めて「素数でない」という判定がでた数が >素数砂漠の最大値?になるのかな~と思ったんですが・・ 要するに、素数 p の「手前の」素数 q を「素数砂漠」と呼んでいるということですか?

min_k_may
質問者

補足

連続して素数が現れない部分=「素数砂漠」らしいです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

試験問題の丸投げは違反ですよ!! WIKIから 1とその数自身以外に正の約数がない1 より大きな自然数のこと。 どこまでの範囲で調べるかを決めないと無限大になると思います・・・

min_k_may
質問者

補足

ごめんなさい; 何が分からないかも分からない状態だったので; 最初に素数を入力してもらう形のプログラムにしようと思ってます。 ご指摘ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

「素数砂漠の最大値」をもっと具体的に定式化するところから始めましょう。 はい、補足にどうぞ。

min_k_may
質問者

補足

具体的に定式化、ですか? ええっと・・ 素数は2以上の自然数で1とそれ自身以外の約数をもたない数で・・ 自然数をNとすると2~N-1までの自然数で割り切れるかどうかで素数判定をするんですよね?? だったら、最初に素数Aを入力してもらって、A-1、A-2、・・の数を素数判定していって初めて「素数でない」という判定がでた数が素数砂漠の最大値?になるのかな~と思ったんですが・・ 定式化できませんでした;すみません;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プログラミングをするならどの言語

    こんにちは宜しくお願いします。 40歳近い私は、BASIC等でプログラムを組んだ世代ですが 最近新しいプログラミング言語を覚えようと思っております。 用途にもよると思いますが、お勧めのプログラミング言語が ありましたら、教えてください。 自分では、JAVAとかC++とかなのかなと思っています よろしくお願いします

  • プログラミング言語がたくさんある理由

    数学関係学科の大学生3年生女子です。 数学では論文の作成にTeXを使うので、学校で少しやっています。 そのほか少し興味があり独自にpythonの勉強をしています(さわりだけですが 笑) プログラミング言語では、そのほかにBASICやCとか耳にします。 R,というのもプログラミング言語なのかもしれませんが、少し調べると、COBOLとかFORTRANなんて言語もあるそうで、そもそもなんでこんなにプログラミング言語があるんでしょうか?

  • プログラミングについて

    質問なんですが、よく小学生でもプログラミングとかするじゃないですか、小学生で数学も出来ないのに何でプログラミングが出来るのか不思議です。また、そういう方はプログラミングの本とか読んで勉強するのでしょうか?もしつまずいたりしたら誰に質問するのでしょうか? プログラムの得意な方はどうやって勉強しましたか? 独学で学んだ方お願いします!!

    • 締切済み
    • CGI
  • プログラミング初心者です。

    プログラミング初心者です。 Visual Basicを勉強し始めようと考えているのですが、 Visual Basicのプログラムを書いたり実行したりするには 何か特別なソフトが必要なのでしょうか? VBSのようにメモ帳だけだといいんですが・・・ 詳しい方、宜しくお願いします。 パソコンはXPです。

  • プログラミングの問題です。

    プログラミングの問題です。 二つの自然数の最大公約数(つまり二つの整数を割りる最大の数)を 求める「ユークリッドの互除法」のアルゴリズムを 箇条書きで表現せよ。ただし、PADおよびプログラミングに書き直せるように 適当な変数を用いること。と言われました。 私はどうしていいかわかりません。どなたか解答してくれませんか。 よろしくお願いします。アドバイスとか何でもいいのでよろしくお願いします。

  • プログラミングについてです。

    プログラミングについてです プログラミングを勉強しようと思い。 知恵袋でいろいろ見ていると疑問があったのでぜひ答えてください。 1 まったくの初心者ですが、いつかは色々な拡張子を再生できるソフトや、 拡張子を変換するオーサリングソフト?みたいなものを作りたいです。 はじめは初歩の初歩からやるつもりですが、 将来こういうソフトを作るにはどういうプログラミング言語がよいのでしょう? 2 これは職に出来ますか? 3 数学が苦手です(基本は出来ますが、証明がまったく出来ません)どの程度出来たらよいですか? 4 初心者に「まずこれを読め」や「このサイトを見ろ」という本はありますか? 5 プログラミングは英語で書くみたいですが、英語も文法があまり分かりません。 これは致命傷ですか? 6 高2ですが今から頑張れば、働くまでにある程度出来ますか? 一応工学のほうに行くつもりです。 これらの質問に1つでも答えていただけたらうれしいです。 きつい言葉でも受け止めますで回答お願いします。 意味のわからない質問があったらすいません。

  • プログラミングで心がけていること

    プログラマーさんに質問。 僕はからっきし数学がだめでプログラミングなどもってのほかです。 でも作りたいウェブサイトがあってそれにはPHPのプログラムが必要で、勉強中です。とほほ。 絵を描くのはめっちゃ得意なんですけどね。 そこで質問なのですが、プログラムを組む上で個人的に大切にしていることってあります? もしあったら教えてください。よろしくお願いします。

  • プログラミングについて教えてください

    (仮称)十進BASICのプログラミングについて質問です nCrを求めるプログラム INPUT n.r LET p=1 FOR k=(1) TO (2) LET p=p✳︎(3)/(4) NEXT k PRINT p END (1)~(4)に入る数式や文字を2通り教 えてください

  • BASICプログラミング(10進法→16進法)

     10進法で表された数を、16進法表記に変換する  プログラムをBASICで作りたいのですが、どうしたら  よいのか分かりません。   分かる方教えてください。お願いします

  • プログラミングをする資格

    プログラミングについてまったくの素人なのですが、 現在必要に迫られ、PHPの勉強をしております。 PCなどを使うのは昔から好きで、プログラミングなどを勉強している時も まだなにも知らないせいかさほど嫌とかは思いません。 むしろ知らないことに対する好奇心などが強いからかも知れませんが 楽しいさを感じるときもあります。 ただし一点どうしても気になっていることがあります。 プログラミングを勉強してて分かったのですが、やはり数学がメインになっていると思うのですが、私は昔から数学が苦手です。 そういう人でも今後プログラミングに携わっていくことは可能なのでしょうか。もちろん本人の努力次第というのも分かるのですが、 実際に数学が出来ない、不得意というプログラマーなどもいるのでしょうか? 周りにプログラマーなどがいないため、聞きたくても聞けなかったのでここで質問をさせて頂きました。 どなたか自分の素朴な疑問にお答えして頂けたら幸いです。

パスワードが変更できない
このQ&Aのポイント
  • 初期設定後にパスワードを変更しようとしてもエラーが発生し、パスワードが変更できません。
  • お使いの環境はiOSで無線LAN接続しており、関連するソフトやアプリはありません。
  • パスワード変更の必要性が表示されているにもかかわらず、入力したパスワードが正しくないとエラーが発生しています。
回答を見る