STEP 6.2 (エラトステネスのふるい)

問題

エラトステネスのふるいを、プログラムにしよう。

下のプログラムテンプレートを使い、②にあたる部分を作成せよ。(関数にしてもよい)

実行例

n : 50
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

コメント

解答例

[プログラムテンプレート(未完)]

#include <stdio.h>
#include <math.h>
#define N 50 // プログラム中のNという文字を、50におきかえ

int main (void) {
   int p[N+1]; 
   int i;

/* ① p[2] - p[N]を1に初期化 */
   for(i = 2; i <= N; i++) /* <= を使ってください */
      p[i]=1;

/* ②  エラトステネスのふるい。各自、確認 */
/* もし素数ではないなら、素数番目の配列pは、0にしよう */

(ここを、書いてください)
 
-------
 (新) プログラム確認ツールへ (クリックすると簡単なアンケートのあとに正解例が一度に表示) 
(正解のコードを確認するツールです。 利用した皆さんは状況をアンケートで知らせてください。
今は、まだどうしても作成が難しい人は、(A) コードの全体 (B) 実行の様子 の確認を行って、自分のレポートにしてください。わからない部分はハイライトしてChatGPTを利用してみて。
次回はできるだけ自分の力で! 利用した皆さんは状況をアンケートで知らせてください。)
(2024年度4年生のツールです。答え見せすぎだけど、、と議論しましたが、できないときは、まずわかることこそ重要だ!とのことです) ------

/* ③ 値が1のものは素数。 */
   printf("n : %d \n", N);
   for(i = 2; i <= N; i++) /*  <= を使ってください */
      if(p[i]==1) 
         printf("%3d", i);

   printf("\n");

   return 0;

}