A 回答 (5件)
- 最新から表示
- 回答順に表示
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とそれ自身以外では割り切れない)
でテストしています。
(もっとも単純だが、無駄も多い)
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京なんて数字を入力されると、コンピュータは別の数字として扱い、答えが信用できません。
まぁ、学校の授業で出るような問題でこんな答えをしたら×ですが、実務で作るプログラムでは、こういうことを考えないといけません。
この回答への補足
宿題等ではありませんが、
参考書の参考問題にあったので、聞いてみたのです。
その参考書には問題の解答もありましたが、それは理解ができなかったので、ほかのプログラムを聞いているのです。
ですから、できないことはないかと思われます。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 malloc 関数を使って教えてください。 入出力例1 3 2022/07/21 09:36
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像の拡大・縮小
-
OpenCVによる4値化について
-
C言語で%を使わない余りの出し方
-
ヒストグラム均等化処理プログラム
-
関数とビット列
-
intとlongは同じ?
-
OpenGLの惑星プログラム
-
迷路を脱出する経路探索プログ...
-
エラー C言語 プログラミング...
-
再起を使って迷路を解くプログ...
-
C#メール受信から件名、本文を...
-
2次関数プログラムを描写する...
-
16bitで乱数を生成する方法
-
c言語8クイーン問題が分かりません
-
再起呼び出しの回数をカウント...
-
C言語
-
C++で表を作成したいのです ...
-
複数の共有メモリの作成
-
2の補数を計算するプログラム
-
当たり判定の処理がわかりません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
再起呼び出しの回数をカウント...
-
C言語で%を使わない余りの出し方
-
迷路を脱出する経路探索プログ...
-
画像の拡大・縮小
-
分数の足し算をさせるプログラ...
-
C言語で簡単なパックマンゲーム...
-
C++で表を作成したいのです ...
-
条件が多い場合
-
複数の共有メモリの作成
-
ヒストグラム均等化処理プログラム
-
3のつく数と3の倍数を表示 C言語
-
argvのNULLチェック
-
乱数で交互に偶数、奇数が、、、。
-
プログラミングに関して
-
OpenCVによる4値化について
-
whileとifを使い偶数を出すには
-
16bitで乱数を生成する方法
-
再帰処理をループ処理に変換
おすすめ情報