あなたのコードには多くの問題があります。それらのいずれもコンパイルを妨げず、出力の取得に問題を引き起こすこともありません。最初に、目的の結果を得る方法を説明し、次に問題を強調します。
fs を合計するように変更されたコードを次に示します。条件を満たす素数を出力するたびに f を sum に追加するだけです。最後に、すべての fs の合計を出力する必要があります。
#include <stdio.h>
//Use int as the return type explicitly!
int main()
{
int i=10,j,c,sum,b,x,d,e,z,f,g;
printf("\nPrime numbers from 10 to 99 are the follwing:\n");
//Set the sum of all primes whose reverse are also primes to zero
sum = 0;
while(i<=99)
{
//c is tyhe number of factors.
c=0;
for(j=1;j<=i;j++)
{
if(i%j==0)
c++;
}
//If there are only two factors.
//Two factors (1 and itself) => Prime
if(c==2)
{
//Reverse i and store it in x
b=i;
d=b/10;
e=b-(10*d);
x=(e*10)+d;
//Curly braces unnecessary
{
//Check if the reverse i.e. x is prime
//z is the number of factors
z=0;
//f is the number being tested for primality.
f=x;
for(j=1;j<=f;j++)
{
if(f%j==0)
z++;
}
//If f i.e. x i.e. the reverse has only two factors
//Two factors (1 and itself) => Prime
if(z==2)
{
//print the prime number.
printf("%d %d \n",i,f);
//Add f to the sum
sum += f;
}//if(z==2)
}//Unnecessary braces
}//if(c==2)
i++;
}//end while
//print the number of reversed primes!!
//That is sum of the reversed values of numbers satisfying the
//condition!
printf("\nThe sum is:%d\n", sum);
//getch() is non standard and needs conio.h
//Use getchar() instead.
//Better solution needed!!
getchar();
//Return 0 - Success
return 0;
}
出力
...@...-desktop:~$ gcc -o temp temp.c
...@...-desktop:~$ ./temp
10 から 99 までの素数は次のとおりです。
11 11
13 31
17 71
31 13
37 73
71 17
73 37
79 97
97 79
合計:429
...@...デスクトップ:~$
コード内のすべてのコメント (上記) に注意してください。さらに、次のことを検討してください。
- 不要なブレースを削除します。
- 1 つの変数を 1 つのことに使用する。(f の代わりに x を使用することもできます)。
- number や numberOfFactors などのより適切な変数名を使用します。
- Mehrdad Afshari が提案したように、コードを関数に分割します。
- sqrt(num) (数値の平方根) までテストされる数値 (num) の除数があるかどうかを確認して、素数性をテストすることを検討してください。
- このことを考慮:
- 99までの数字は、反転した数字も2桁の数字です。
- 数が既に見つかった素数のセットに含まれている場合は、簡単に確認できます。
- これにより、素数性のチェックの回数が減ります。(高価です)
- 上記を行うには、識別された素数のリスト (primeList) と反転素数のリスト (revList) を維持します。primeList にもある revList のアイテムはすべて、条件を満たします。その後、必要な合計 (429) を簡単に取得できます。
- sweet61の答えを見てください。私の方法でエラトステネスのふるいを使用すると、間違いなくはるかに効率的になります. ふるいの最後で素数を反転し、(最後に) revList に入力できます。
個人レベルでは、最善の解決策を見つけようとしています。あなたも同じことを試みてくれることを願っています。私はすべてをあきらめずにあなたを助けようとしました。
これが役立つことを願っています。
num/2 までの除数をチェックすることを提案したことに注意してください。vartec の提案で sqrt(num) に修正しました。