• ベストアンサー

素数の値を画面に表示させるプログラムの作成

キーボードから整数Nを入力し、1からNまでの整数の中の素数の値を画面に表示させるプログラムを作成しなさい。 ヒント:DO文の2重ループ、mod( ip, iq )。 ってあるんですけど、さっぱりです。 今までなんとか自分一人でやってきたんですが、 素数の出し方?DO文の二重ループ?? こればっかりは・・・ どうか教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • hypnotize
  • ベストアンサー率33% (56/165)
回答No.1

言語によって記述が違うので、あえてリストは書きませんが、 概略、こんな感じです。 ipを1~Nまで増加させるループ   iqを1~N/2まで増加させるループ     ipがiqで割り切れる(あまりがゼロ)→iqのループを抜ける(素数でない)   iqのループ終わり   iqがN/2に達している→ipを表示する(素数である) ipのループ終わり

その他の回答 (2)

  • 15mm
  • ベストアンサー率65% (65/100)
回答No.3

2重ループのヒントとははずれていますが、(的外れな回等?) 「エラトステネスのふるい」 という方法もありますよ。 文章だけではうまく説明できませんので調べていただいたほうが早いと思います。 配列の要素を削除していくという作業を行えば似たような動作になるはずです。 ループ数も少なくなるはず・・・?

  • hypnotize
  • ベストアンサー率33% (56/165)
回答No.2

追加です。 言語によってはiqのループと達した判定値をN/2+1にする必要があるかも知れません。 N/2を超えると、割り切れないのは自明ですので、1~Nまで計算するのは意味がありません。1~N/2(またはN/2+1)まで計算すれば充分です。

関連するQ&A

  • プログラム (BASIC) 教えてください

    コンピュータが 3桁の整数(100~999) n をランダムに生成。 「3桁の整数(100~999) n を当ててください」と表示。 解答者はキーボードで整数 x を入力。 x > n なら「もっと小さい数です.再入力してください」と表示してゲームを継続( 3. に戻り,x を再入力)、 x < n なら「もっと大きい数です.再入力してください」と表示してゲームを継続( 3. に戻り,x を再入力)、 x = n となったら ループを抜ける。 「正解です」と表示して,ゲーム終了。 100 RANDOMIZE 110 PRINT "3桁の整数(100~999) n を当ててください" 120 LET n=100+INT (900*RND) 130 DO 140 INPUT x 150 IF x=n THEN EXIT DO 160 IF x>n THEN 170 PRINT "もっと小さい数です.再入力してください" 180 ELSEIF x<n THEN 190 PRINT "もっと大きい数です.再入力してください" 200 END IF 210 LOOP 220 PRINT "正解です" 230 END このプログラムをIF、END IFを一回のみ使うプログラムに変える方法を教えてください。

  • ある数に限りなく近づく値=そのある数。についてです

    ある数に限りなく近づく値=そのある数 例)1.999・・・=2,0.000・・・・001=0 このように0以上の整数をnとおいて n.999・・・=n,n.000・・・001=n このような、1=1のような意味の等式は成り立ちますでしょうか? ご回答宜しくお願い致します。

  • VB.NETで素因数分解のプログラムを作成する

    2以上の整数が与えられたとき、それを素数の積に分解するプログラムを作成したいのです。 例えば、TextBox1に24と打ち込んで、Button1をクリックすると、TextBox2に2×2×2×3が表示されるといった具合です。 ↓ここからどうすれば良いか、ご教授お願い致します。 Private Sub IntegerButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n, a As Integer n = TextBox1.Text Do back: If n Mod 2 = 0 Then n = n Mod 2 = 0 Else n = n Mod 3 = 0 End If GoTo back Loop Until n = n + 1 TextBox2.Text = n & "×" End Sub End Class

  • n進数の値を10進数の値に変換するには?

    こんにちは。 C言語において、n進数の値を10進数の値に変換する方法を考えています。 例えば、2進数の101を、10進数で表すと5になります。 これを関数化し、 n_to_m(int x, unsigned n); といったプロトタイプで、 渡された整数x(n進数)を、10進数での値に変換する関数を作りたいのです。 逆に、10進数の値を、n進数の値に変換する関数も一緒に作りたいと考えています。 何かいい方法を思いついた方がいらっしゃれば、是非アドバイスを頂きたいと思います。 では、よろしくお願い致します。

  • 関数の値(scanf)

    初心者なもので、言葉の使い方を間違っていたら申し訳ありません。いいたいことが伝わればよいのですが…。 scanfに関して疑問に思ったことがあります。経験的なことなので、正しいかわからないです。次の(1)と(2)から(3)のことが正しいか教えてください。 (1) int a; do{ printf("整数を入力してください\n"); }while(scanf("%d",&a) ==0); printf("入力した数は、%dです",a) このとき、「(いかなる整数)+(ENTER)」を入力しても、do~whileのループを抜け出す。 (2)また、上のプログラムで、継続条件式の中身を  … }while(scanf("%d",&a)!=0);  … とすると、「(いかなる整数)+(ENTER)」を入力してもループが抜け出せない。 (3)したがって(1)と(2)から、scanf()は入力するだけで、値を真(1)を返す。

  • C言語のプログラムについて

    C言語のプログラムについて 3桁の自然数の中で、自分自身を含めた約数が奇数になるものがいくつあるかを求めるプログラムを作りたいのですが、swich文を使って、6通りの方法で出そうとしていまして、 while 文、 for文、 do while文に加え、 for文のを、1つの関数として独立させたもの、 さらに、for文のを重ループ部分のそれぞれのループに対応して、2つの関数として独立させたもの、 そして、この2つの関数のどちらともをループを用いずに再帰呼び出しを用いたもの の6通りで出したいのですが、swich文を使うところは自力でできたのですが、あとの6つそれぞれのプログラムの組み方がわかりません。 教えていただけないでしょうか?ややこしい書き方をしてすいません・・・。

  • 素数の分類と無限性に関して。

    素数の分類と無限性に関して。 ※^は乗数の意味です。 8n+1型の素数が無限に存在することの証明 原始根の存在(素数 p を法とする整数環 Z/pZ の乗法群が位数 p - 1 の巡回群であること)を使う。 x を整数とする時x^4 + 1 の奇素数因子を p とする。 x^4 ≡ - 1 (mod. p) より、両辺を2乗することでx^8≡1となる。 x の p を法とする整数環 Z/pZ の乗法群での位数は 8 で有るから、 p ≡ 1 (mod. 8) となる。ここで、 p ≡ 1 (mod. 8) となる素数が有限個であったとする時、その総乗積を P として、 (2P)^4 + 1 の奇素数因子を考えると矛盾が出る。 私は2PをX"とおいて上と同様に考えました。 この証明の流れや、8n+1型の素数が無限に存在することは理解できるのですが、上の証明における「位数は 8 で有るから、 p ≡ 1 (mod. 8) となる」の部分がどのようにして言えるのかが分かりません。フェルマーの小定理を用いているのでしょうか? よろしくお願いします。

  • 素数の分類に関して

    [類題] 「8n + 3 型の素数は無限に多くある事を示せ。」の略解。 *)文中のp^は複素数pの共役な複素数です。例えば、p=1+iの場合、p^は1-iのことです。 また、a2 はaの二乗という意味です。  証明)もし 8n + 3 型の素数が有限個であったとし、その全体を p1, p2, ... , pn とする。 P = p1p2 ... pn + √2 i と置いて、これを単項イデアル整域 Z[√2 i ] で素元分解する。 N (P) = PP^ は奇数であるから(正確には、 N (P) ≡ 3 ( mod. 8 ) 、) P の有理整数の素因数は奇数である。この因子は PP^ の中では偶数冪で出てくるから、その部分は 8n + 1 型である。又、 P は有理整数に同伴でないから、a + b √2 i 型 (b ≠ 0, 有理整数の素因子と同伴でない物) の因子がある。PP^ は奇数であるから a は奇数である。更に、この a + b √2 i 型の因子の b が偶数であるとすると、 N( a + b √2 i ) = a2 + 2b2 ≡ 1 (mod. 8) であるから、 この形の b が全て偶数であるとすると PP^ ≡ 3 (mod. 8) と矛盾する。従って b が奇数の物 a + b √2 i が有るが、素元分解の一意性により、N( a + b √2 i ) = a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8) となり有限性に矛盾。故にこの型の素数は無限個。 この証明における、この因子は PP^ の中では偶数冪で出てくるから、その部分は 8n + 1 型である。がなぜ言えるのかという点と 最後の一文である 素元分解の一意性により、N( a + b √2 i ) = a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8) となり有限性に矛盾。 における a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8)がなぜ分かるのかが理解できません。 よろしくお願いします。

  • 素数の分類に関して

    前回質問させていただいた証明に関することなのですが、最後の一文が分からないためもう一度質問させていただきます。 [類題] 「8n + 3 型の素数は無限に多くある事を示せ。」の略解。 *)文中のp^は複素数pの共役な複素数です。例えば、p=1+iの場合、p^は1-iのことです。 また、a2 はaの二乗という意味です。  証明)もし 8n + 3 型の素数が有限個であったとし、その全体を p1, p2, ... , pn とする。 P = p1p2 ... pn + √2 i と置いて、これを単項イデアル整域 Z[√2 i ] で素元分解する。 N (P) = PP^ は奇数であるから(正確には、 N (P) ≡ 3 ( mod. 8 ) 、) P の有理整数の素因数は奇数である。この因子は PP^ の中では偶数冪で出てくるから、その部分は 8n + 1 型である。又、 P は有理整数に同伴でないから、a + b √2 i 型 (b ≠ 0, 有理整数の素因子と同伴でない物) の因子がある。PP^ は奇数であるから a は奇数である。更に、この a + b √2 i 型の因子の b が偶数であるとすると、 N( a + b √2 i ) = a2 + 2b2 ≡ 1 (mod. 8) であるから、 この形の b が全て偶数であるとすると PP^ ≡ 3 (mod. 8) と矛盾する。従って b が奇数の物 a + b √2 i が有るが、素元分解の一意性により、N( a + b √2 i ) = a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8) となり有限性に矛盾。故にこの型の素数は無限個。 素元分解の一意性により、N( a + b √2 i ) = a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8) となり有限性に矛盾。 における a2 + 2b2 は素数であり a2 + 2b2 ≡ 3 (mod. 8)となった場合なぜ有限性に矛盾していると言えるのでしょうか。 a2+2b2が素数でないならば矛盾はしてないのでしょうか。 よろしくお願いします。

  • C言語プログラム

    C言語プログラム ある数を入力して、入力された数を一辺とする図形を描くプログラムを作りたいんです。 分かりやすくすると、 入力された数が5だった時、画面には ***** ***** ***** ***** ***** ↑こう出力させたいんです。 四角だけじゃなくて、 * ** *** **** ***** ↑こういう三角とか、逆三角とか、 *        * **     *** ***  ***** **     *** *        * こんなかんじでいろんな形を描けるようにしたいんです。 C言語で、for文の二重ループを使うようにとのことなんですが、 どうすればいいでしょうか。 こういうのってズルですけど、何かヒントでも貰えればと思っています...。

専門家に質問してみよう