質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

1956閲覧

入力した数に含まれる素数をすべて表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/09/05 13:02

前提・実現したいこと

c言語で入力した数に含まれる素数を表示するプログラムを作っています。例えば、6と入力したら2,3,5を表示するといった感じです。自分でいろいろ試行錯誤しましたが行き詰ってしまったのでアドバイスをいただきたいです。

発生している問題

2以上の整数何を入力しても表示される数字が4のみになります。

該当のソースコード

c

1#include<stdio.h> 2 3int main(void) { 4 int n, r, i, j; 5 6 printf("整数を入力してください。\n"); 7 scanf_s("%d", &n); 8 9 if (n >= 2) { 10 for (i = 2; i <= n; i++) { 11 for (j = i - 1,r=1; r!= 0; j--) { 12 r = i % j; 13 } if (j == 1) { 14 printf("%d\n", i); 15 } 16 } 17 } 18 else { 19 printf("この整数の素数は表示できません。\n"); 20 } 21 return 0; 22}

試したこと

2つ目のfor文の初期設定式のrの値を0にすると2のみが表示されます。rの値が0のままで繰り返しがされなかったためだと思っています。
rの値を1以上の整数にすると4のみが表示されます。これはなぜこうなるのかが分かりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/09/05 13:11

> 入力した数に含まれる素数を表示 もしかして、入力した数以下の素数を表示、ですか? それだと'C言語 入力した数以下の素数を表示'でググると32万件ほどヒットするので、わざわざ聞くほどの難しい話は残らないと思うので違うのかな。
退会済みユーザー

退会済みユーザー

2021/09/06 11:33

同じような目的のソースコードがあることは承知していました。途中まで自分なりにコードを書き問題が発生し、原因や解決策を調べましたが見つからなかったため質問させていただいた次第です。今回は回答していただき解決することができましたが、これからはどうしても自己解決ができなかったときに質問させていただくことにします。ご意見ありがとうございました。
guest

回答1

0

ベストアンサー

C

1if (j == 1) {

ではなく、

C

1if (j == 0) {

です。
このアルゴリズムでは、「割る数を減らしていって、1 で初めて割れ切れたなら、それは素数だよね」
ということを確かめています。
なので 割れた数が 1 なら、ということで、j == 1 としたくなりますが、
「j-- を先に行ってから、r!=0 の判定をしている」
というところ、ご注意です。

j=1 で割り、その判定結果は r に保存されます。
そのあと、j は j-- されて 0となって、r!=0 が false 判定され for ループを抜けます。
なので j==0 との比較をする必要があります。

わかりづらい説明で申し訳ないです。

投稿2021/09/05 13:32

編集2021/09/05 13:46
ak.n

総合スコア291

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/09/06 11:25

認識を間違えていました。解決できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問