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が大きくなれば素数で区切られた区間を保持するテーブルも大きくなること
判定しようとする数が大きくなれば素数判定にかかる時間も大きくなること
これらを考慮してメモリと時間を節約するアルゴリズムを考える必要があるでしょう。
この回答への補足
なるほど!
私は「素数砂漠の最大値」=「そこまでに存在する合成数の中で一番大きな数」だと勘違いしていたみたいです。
挙げてくださった例で言うと「12」だと思ってました。
分かりやすくて丁寧な説明ありがとうございます。
理屈は理解できました!
理屈は、なところが私の頭の残念なところですが・・
これらのことを踏まえながら考えてみようと思います。
本当にありがとうございました!
No.6
- 回答日時:
こんばんは。
ことばで表現するのが難しいようですので・・・
例えば、あなたのプログラミングした関数(?)に
1、2、3、4、5
を入力した場合(初期値を与えた場合)の出力はどうしたいのですか?
この回答への補足
protoさんのアドバイスにより、自分が「素数砂漠の最大値」を勘違いしていたことに気づきました;
今頭の中にあるプログラムじゃ全然ダメなことが分かったので、もう1度考えさせてください。
とりあえず最初は自分でやってみますね。
たくさんのアドバイスありがとうございました!
分からなくなったらまたここに来ると思うので、その時はまたよろしくお願いします。
No.5
- 回答日時:
>今私の頭の中にあるプログラムを書きだしなさいということですか??
そうじゃない。
例えば、素数 p をプログラムに与えて「素数砂漠」をどのようなフォーマットで得たいのですか?
プログラムに与えられた数が素数でない場合はどうするのですか?
この回答への補足
最初に素数を入力してもらって、一応素数判定を行い、素数じゃなかった場合は「入力ミス」等の表示をしたいと思っています。
素数だった場合は、先ほど補足したように数字を1つずつ遡って素数判定をし、「素数でない」数が出たらそれが素数砂漠の最大値になるのかな?と考えたんですが・・・
よく考えてみれば、入力した素数がAでA-1も素数だとしたら素数砂漠は存在しないことになるんですかね?;
プログラムを「入力した素数までに存在する素数砂漠の最大値」とすればいいんでしょうか?
No.4
- 回答日時:
>連続して素数が現れない部分=「素数砂漠」らしいです。
そうだとして、貴方が求めるプログラムの入力とその出力はどのようなものになりますか?
No.1
- 回答日時:
「素数砂漠の最大値」をもっと具体的に定式化するところから始めましょう。
はい、補足にどうぞ。
この回答への補足
具体的に定式化、ですか?
ええっと・・
素数は2以上の自然数で1とそれ自身以外の約数をもたない数で・・
自然数をNとすると2~N-1までの自然数で割り切れるかどうかで素数判定をするんですよね??
だったら、最初に素数Aを入力してもらって、A-1、A-2、・・の数を素数判定していって初めて「素数でない」という判定がでた数が素数砂漠の最大値?になるのかな~と思ったんですが・・
定式化できませんでした;すみません;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- C言語・C++・C# C#の問題で2つの整数a,bの最大公約数(GCD)を求めるユークリッドの互除法は,aをbで割った余り 2 2022/06/26 16:52
- 英語 英語について質問です。 大岩の1番初めの英文法 長文編です。 (3)がちょっとよく分かりません。 問 1 2023/03/23 16:32
- HTML・CSS HTMLの・要素・属性・属性値 はプログラム言語の「変数」みたいに変更できますか? 5 2022/10/04 05:27
- 英語 あり得ない仮定を、仮定法で表現しない場合の話者の意図について 9 2022/05/25 10:56
- C言語・C++・C# プログラミング 素数か素数ではないか判断するプログラミングで、写真のようなプログラミングを打ったとき 3 2023/05/29 15:50
- 環境・エネルギー資源 中国の砂漠を利用しての太陽光発電は安く電力を作れますか? 中国では砂漠の土地を利用して大規模に太陽光 6 2023/06/18 16:19
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- 就職 情報学科やIT企業の関係者の方にお聞きしたいです。 2 2023/08/01 08:55
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外イキはなぜ1回しか出来ないの...
-
隔年と毎年の違いを教えてくだ...
-
平方の差(基本)
-
x^2sin(1/x) と 0(x=0) での連続性
-
投稿中にエラーが発生しました?
-
エクセルで同じ文字が3連続して...
-
ε-δ論法による関数の連続性につ...
-
「区分的に連続」と「区分的に...
-
統計学の問題
-
関数の原点における連続性って...
-
spiの推論の問題について質問で...
-
連続する2つの整数の積は2の倍...
-
連続と離散は連続的ですか?
-
ジャンケン連勝世界記録
-
実数から実数への写像で、以下...
-
関数f(x)が区間Iで連続である...
-
自動紙送り装置
-
毎日忙しくゆっくりする時間を...
-
ファイゲンバウム定数とマンデ...
-
連続する3つの自然数がある。ま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外イキはなぜ1回しか出来ないの...
-
隔年と毎年の違いを教えてくだ...
-
単連結なn次元閉多様体の連続変...
-
「区分的に連続」と「区分的に...
-
エクセルで同じ文字が3連続して...
-
無理数は連続ですか?
-
ジャンケン連勝世界記録
-
連続する3つの整数の積が6の倍...
-
x^2sin(1/x) と 0(x=0) での連続性
-
1日あける 一日置き 違いは何で...
-
連続点灯時間とは
-
次の関数f(x)が連続になるよう...
-
連続する2整数が互いに素(最大...
-
平方の差(基本)
-
算数-整数の和
-
連続する番号を引く確率
-
単純支持梁と連続支持梁の違い
-
自動紙送り装置
-
数列の問題で 階段の登り方の漸...
-
同じものを含む順列
おすすめ情報