プロが教える店舗&オフィスのセキュリティ対策術

以下のように2以上の整数値 n (2≦n≦10,000)を入力すると,n 以下の素数の個数と最大の素数を求め,これらを出力するプログラムを作成しました。
これを修正して正の偶数値 n(2≦n≦10,000)を入力すると,足して n になる素数の組の数を求め,出力するプログラムを作りたいと思います。
どのように修正したらよいかお教えください。

#include <stdio.h>

//2から入力した整数値nまでの数値を入れる配列
//配列の中をすべて0にするよう初期化
int a[10001] = {0};

//素数かどうかを判断し、素数の個数を数える関数
int sieve(int n) {
int i, j;

//2からnまでの整数を並べる
for (i = 2; i <= n; i++) {

if (a[i] == 1) continue;
for (j = 2; j <= (n / i); j++) a[i * j] = 1;
}
//素数の個数を調べる
i = 0;
for (j = 2; j <= n; j++) {
if (!a[j]) a[i++] = j;
}
return i;
}

int main(int argc, char *argv[]){
int n;
int size;

printf(“整数値は?:”);
scanf("%d", &n);
//nまでの素数の個数をsizeに代入
size = sieve(n);
//n 以下の素数の個数を出力
printf("%d\n",size);
//素数の配列の最後の数値(n 以下の最大の素数)
printf("%d\n",a[size-1]);

return 0;
}

sieve関数に呼び込んだ後はaに素数が貯まっているのでmainでn以下の素数について足してnになる素数の組を調べるプログラムはどのように作成したらよいのでしょうか。

A 回答 (1件)

まず、ちょっと確認したいんだけど、



> 正の偶数値 n(2≦n≦10,000)を入力すると,足して n になる素数の組の数を求め

とアッサリ書いてるんですが、問題は

> すべての偶数値 n はいくつかの素数の組として書き表せる

って数学的に保証されてるんだろうか。その辺貴方や課題出した人ってどう考えてる?
これ、厄介だし、数学的に保証されてない事をプログラミングするのは「不可能」ですよ。どの辺の定理をバックグラウンドにしてプログラムしよう、って思ってんだろ。

なおよ。

> 全ての 2 よりも大きな偶数は2つの素数の和として表すことができる

だったら、これはゴールドバッハの予想、っつって性器の、もとい世紀の大難問だ。
    • good
    • 0
この回答へのお礼

ありがとうございました。
出題者に確認させていただきます。

お礼日時:2021/07/13 21:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!