• 締切済み

中1です。500以上1000以下の素数を3つ探し、

中1です。500以上1000以下の素数を3つ探し、 それが素数であることを示してください。 それで、エラトステネスのふるいという方法を 教えてもらったのですが、 よくわからなかったので、 どなたかわかりやすく教えてください。 あと、まだルートを習っていないのでルートを使った式は わかりません・・・。 宜しくお願いします。

みんなの回答

  • sak_sak
  • ベストアンサー率20% (112/548)
回答No.2

素数は約数ととても近い関係にあることはわかりますね? そこで、12の約数の探し方を思い出してみましょう。 まず1が挙げられますが、この時に12もセットにすると間違いが少ないですね。 同じように2と6をセットにして、3と4もセットにすれば終わりです。 12を1で割ったり、2で割ったり、3で割ったりはやるけれど 4で割ったり、5で割ったり、6で割ったりは実際上やってないですね。 37はどうでしょうか? 1と31、2はだめ、3もだめ、4もだめ、5もだめ、6もだめ 次は7になりますが、仮に7とセットになる数があったとしても、7より小さい数のはずだから、 1~6で割ったときに7が出てこなかったということは7では割り切れないということです。 この考え方がとても重要です。 これで37が素数であることがわかります。 37が素数かどうかをチェックするには6までやれば十分にわかるわけです。 7×7=49が37より大きいから、という解釈もできます。 では、逆に考えてみましょう。 もし37以下の素数が全部わかったら どこまでチェックが可能になるのでしょうか。 37×37=1369だから、1369まで可能だということです。 つまり、あなたの目的達成のためには 37以下の素数でチェックするだけで十分だということになります。 ここまでの説明で十分に素数は求められると思いますが エラトステネスの篩(ふるい)について説明します。 まずノートなどに500~1000の数を書き出してみましょう。 偶数で素数なのは2しかないので最初から奇数だけ書き出しても良いです。 面倒なら500~599の中に3個くらいは十分にありますから それだけでもいいです。 ポイントはマス目を書いておくということです。 もし1行に10個ずつ書いていくとしたら 501,503,505,507,509,511,513,515,517,519, 521,523,525,527,529,531,533,535,537,539, 541,543,545,547,549,551,553,555,557,559, 561,563,565,567,569,571,573,575,577,579, 581,583,585,587,589,591,593,595,597,599, …となります。 奇数しか書いてないですから2のチェックは必要ないので 3の倍数であるものは消していきます(×や斜線で)。 すると、501、507と525と543、515と533と551、539と557、というように 斜めの直線状に3の倍数が並んでいることがわかると思います。 同じように5の倍数、7の倍数、…37の倍数まで消していくのです。 思ったより早く終わると思いますよ。 消されずに残ったものが素数になります。

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

エラトステネスのふるいですか… 私もちょっとうろ覚えなんですが、結局何か整数の倍数になってるものは素数なわけないんだから、それを取り除いていけば残った数字は素数なんじゃね?ってやつですよね? 例えば500~1000というと501個の数字がありますが、その中で偶数は素数なわけない(2の倍数だから)251個しか考える必要はないですよね? で、3の倍数も違う→5の倍数も違う→7の倍数も違う、ぐらいでふるいにかければかなり数は減ると思います。(多分100以下にはなってるんじゃないでしょうか) まあさらにふるいにかけてもいいですし、残った数字を1つずつ調べてもいいと思います。 証明方法ですが、「その数字を、1とその数字自身以外では割り切れない」ことを示せばいいわけなんですが、数字が500以上と大きいので、全部調べるのは至難のわざです(できなくはないですが)で、約数とは何ぞや?ということを考えていくと、例えば12の約数は1,2,3,4,6,12なわけですが、これは 1*12=2*6=3*4=12となり、ある整数をa、aと同じかそれより大きい数字をbとして、a*b=12と表現できることになります。ということは大小関係を考えた時(bはaより小さくはない)aは6とはなり得ないことがわかります。(6*6=36で12を超えてしまう、a=2、b=6はOK)このように考えていくと、素数であることを示すには、 「2乗してその値を超えない値」まで調べればよいということがわかります。ちなみに32*32=1024なので、500以上1000以下の整数が素数であるかどうか調べるなら、その数字を2で割り、3で割り、4で割り、とずっと進めて、最大でも32までの中に割り切れるものがなければそれは素数であると言えることがわかります。 以上、参考になれば幸いです。

Maruko2525
質問者

お礼

ご丁寧にありがとうございます。 最後の3行が完全には理解できなかったのですが、 その他は理解できたのでよく参考になりました。 p、s これってエラトステネスとは少し違った新しい 考え方じゃないですか?? 私の勘違いかもしれないんですけど・・・

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

関連するQ&A

  • 双子の素数

    3~1000の範囲で双子の素数をすべて求めるプログラムの作り方を教えて下さい。友人には「『エラトステネスのふるい』を使え」と言われたのですが、「エラトステネスのふるい」とは一体何なのでしょうか?それも教えて頂きたいです。

  • 素数を判定するいろんな方法は?

    素数を判定する方法はエラトステネスのふるいの他に何かあるのでしょうか。100までは大抵の本に載っていますが、大きな数はふるいにかけても、膨大な手間がかかりそうです。

  • 素数をみつける方法を教えて下さい

    早速ですが、素数を少しでも楽に見つけ出す方法が知りたいです。 私はエラトステネスの篩「自然数NがNの平乗根を超えない最大の整数以下の全ての素数で割り切れなければ、Nは素数である」 は知っています。他にも素数を少しでも楽に見つけ出す方法を教えてください。

  • エラトステネスのふるい(素数)についての疑問

    今、家にある中学の参考書を読みながら、中学数学を勉強しているものです。その中の素数についての一番最初の問題で、 次のうちから、素数を選べ。 1 6 13 25 51 79 87 91 という問題があり、その解法の一つでエラトステネスのふるいというもの(2から順に自然数を書き、2を残して2の倍数を消し、3を残して3の倍数を消し、5を残して5の倍数を消す、以下同様にして求める…という方法)があるのですが、上の問題でずっとエラトステネスのふるいを使いながら合成数を消していくと、11の倍数を消すところで、「13、79は11で割り切れず、13÷11、79÷11ともに商が11より小さくなるから素数である。」と参考書にあり、そこでふるいをかける作業は終わっています。 この参考書(特に、"13÷11、79÷11ともに商が11より小さくなるから素数である。"というところ)のこの部分と、ずっとにらめっこをしてきたのですが、何故「13÷11、79÷11ともに商が11より小さくなるから素数である」と言い切れるのか、分かりませんでした…。 少なくとも13は、次に11の倍数となる数である11×2=22の間に13が存在しないから素数、と言い切れる感じはするのですが、79だと、たとえ11で割り切れなくても、13、17で割り切れるかもしれない…(もちろん実際そんなことはないのですが)、と、感覚的にそう思ってしまいます。そして、「13÷11、79÷11ともに商が11より小さくなるから素数である」を言いかえれば、「商が11より大きくなる場合は、素数でない可能性がある(121以降の数であれば、たとえ今の時点で11で割り切れなくても、素数でないかもしれない)」というのも、よく分かりません…。 そんなこんなで、このふるいが11で終わっている理由が分からないのです。 馬鹿みたいな問題かもしれないのですが、頭が堅くて、分からなくて困っているので、良かったら教えていただければ嬉しいです…。

  • エラトステネスのふるい java

    下の問題がわかりません。どうかよろしくお願いします 問1 2以上n以下の自然数のうち、素数だけを選び出し、prime.txtという名称のファイルに書出したい。ただし、nの最大値は2^15 - 1 = 32767とする。 これをエラトステネスのふるいによって書きなさい 問2 上記の方法で作成したprime.txtを利用して、キーボードから入力する適当な自然数lを素因数分解するプログラムを作成しなさい。

  • 以上・以下をどのように使っていますか?

    以上・以下をどのように使っていますか? 例えば100以上と言うときその数は含んでいますか。 正しくは含みます。

  • 菅野正人の素数生成方法は、多項式時間計算量?

    菅野が下の動画に示した素数生成メカニズムを形式化した、菅野著『数字パズル SeeK 10』などに於ける、エラトステネスの篩のアルゴリズムは、多項式時間内で素数を生成可能ですか。: https://www.youtube.com/watch?v=7u9NdEAOQaY

  • すばやく素因数分解する方法は?

    「暗号解読」(サイモン・シン(著)青木薫(訳) 新潮社)という本を読んで、急に素数のことに関心を持ちました。 数十桁もある数(合成数)を素因数分解するのは、えらく時間がかかることが書かれていました。 中学生が計算する素因数分解や、「エラトステネスのふるい」のほかに、手計算や計算機を使って、合成数から素数を見つける方法(素因数分解)を知りたいので、ご存知の方教えてください。 できれば、計算機科学における現在、最速の素因数分解の方法(アルゴリズム)を知りたいです。

  • C言語 エラトステネスのふるい ポインタ

    C言語のプログラミングなのですがどなたか教えて頂けませんか。(説明も) エラトステネスのふるいを用いて,10000 までの自然数に素数がいくつあるかを表示するプログラムを作れ。 ただし , 配列は用いず, ポインタを用いること メモリの確保には malloを使うこと よろしくお願いいたします。

  • ○個ずつ改行

    C言語を学び始めた初心者です。 エラトステネスのふるいをつかって素数を2から997まで表示するところまで理解できました。 しかし、すべて並べて表示したり、1ずつ改行して表示したりすることはできるのですが、 たとえば10個ずつ改行したいと思った場合どのように変数を設定しループを組み立てればうまくいくでしょうか? よろしくお願いします