• 締切済み

C言語で、次のプログラムを作ってみて頂けないでしょうか?

「キーボードから2以上の整数を入力して、 素数であるかどうか判断をする」 というプログラムをCで作るにはどうしたらいいですか? できたら、見本のプログラムを示して頂けると 一番助かります。 よろしくお願いします。

みんなの回答

  • bikkuri
  • ベストアンサー率33% (23/68)
回答No.5

>問題の解答もありましたが、それは理解ができなかったので とありましたが、具体的に何が書いてあってなにが理解できなかったかを 明記すると、適切な回答が得られる可能性が高まりますよ。 ちょっと考えるだけでも 1.解答にプログラム例があったが、その内容がわからない。 2.解答に解説があったが、実際のプログラムのイメージにならない。 3.解答のプログラム/解説のアルゴリズム(判断方法)がわからない。 くらい可能性があるでしょう。 最初の質問の「見本のプログラムが欲しい」から推測すると 2番に近いとは思うが、ずばりでもないような。 以下は、私なりの見本 int i, input; char *msg; scanf("%d", &input); msg = "素数です"; for(i=2; i<input; i++) { ・・if(input % i == 0) { ・・・・msg = "素数じゃない"; ・・・・break; ・・} } printf("%s\n", msg); 処理内容は、素数の定義そのもの(1とそれ自身以外では割り切れない) でテストしています。 (もっとも単純だが、無駄も多い)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.4

こんばんは、No.1のarukamunです。 入力ミスです。(腕が落ちたなぁ。) 誤  if ( p < 2 || n%2 == 0 ){ nなんて変数は定義して無いし、 p = 2の時、素数では無くなってしまいますね。 正  if ( p < 2 || ( p > 2 && p%2 == 0 ) ){ ところで、No.1のプログラムは理解出来ましたか? prime()という関数の引数にint型の数値を入れると、素数かを判断し、0(NOTPRIME)か1(PRIME)を返します。 int型を超える数値を入れると正しく動作しない事はNo.3の方が仰る通りですね。まあ、サンプルですので、バグが有っても構わないでしょう。 まずは、   if ( p < 2 || ( p > 2 && p%2 == 0 ) ){     return NOTPRIME ;   } で、pが2より小さい、または、2より大きくて2で割った時に余りが0であったら素数では無い。としています。 次に   for (i=3 ;i*i<=p ;i+=2){     if ( p%i == 0 ){       return NOTPRIME ;     }   } で、i=3で3で割った時の余りが0であったら素数では無い。 5で割った時の余りが0であったら素数では無い。 ・・・ の様に、i+=2で2ずつ加算して検査しています。 ループの終了条件が、i*i<=pというのは、出来るだけ計算回数を少なくしたかったからです。 なぜ、i*i<=pで良いかは考えてください。 別にi<pでもi<p/2でも良いですけど・・・。 解らない所が有れば、補足してください。

回答No.3

こんにちは。  答え。作れません。なぜなら、入力できる数の下限はありますが、上限がないからです。たとえば、9京なんて数字を入力されると、コンピュータは別の数字として扱い、答えが信用できません。  まぁ、学校の授業で出るような問題でこんな答えをしたら×ですが、実務で作るプログラムでは、こういうことを考えないといけません。

twinkle_light
質問者

補足

宿題等ではありませんが、 参考書の参考問題にあったので、聞いてみたのです。 その参考書には問題の解答もありましたが、それは理解ができなかったので、ほかのプログラムを聞いているのです。 ですから、できないことはないかと思われます。

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.2

#1の人の答えは宿題等である場合は、 使わないほうが吉です。 初心者の作ったものと違いますから、 見る人が見たら、他人が作ったことが分かってしまいますよ。

twinkle_light
質問者

補足

宿題等ではありませんが、 参考書の参考問題にあったので、聞いてみたのです。 その参考書には問題の解答もありましたが、それは理解ができなかったので、ほかのプログラムを聞いているのです。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんばんは とりあえず見本ですね。 エラトステネスのふるいでいいでしょう。 #include <stdio.h> #define PRIME 1 #define NOTPRIME 0 int prime(int p) {   int i ;   if ( p < 2 || n%2 == 0 ){     return NOTPRIME ;   }   for (i=3 ;i*i<=p ;i+=2){     if ( p%i == 0 ){       return NOTPRIME ;     }   }   return PRIME ; } void main() {   int p ;   printf("2以上の整数を入力してください : ");   scanf("%d",&p);   if ( prime(p) == PRIME ){     printf("%dは素数です。",p);   } else {     printf("%dは素数ではありません。",p);   } }

関連するQ&A

専門家に質問してみよう