我试图找到两个给定数字之间的所有素数并将素数加起来。
我有这个循环正确地进行素数检测。
然而,出于某种原因,我不知道如何总结所有素数。
int a,b,i,j,sum=0;
do
{ cout << "Enter a number: ";
cin >> a;
if (a < 4 || a > 1000000)
{ cout << "Input must be between 4 and 1000000 inclusive." << endl;
}
}while (a < 4 || a > 1000000);
do
{ cout << "Enter a second number: ";
cin >> b;
if (b < 4 || b > 1000000)
{ cout << "Input must be between 4 and 1000000 inclusive." << endl;
}
}while (b < 4 || b > 1000000);
if (a > b)
{ int hold;
hold = b;
b = a;
a = hold;
}
cout << "The prime numbers between " << a << " and " << b << " inclusive are: " << endl;
//int sum;
for (i = a; i <= b; i++)
{
for (j = 2; j <= i; j++) // Changed the < to <=, and got rid of semicolon
{
if (!(i%j)&&(i!=j)) break;
if (j==i)
{
cout << i << endl;
sum += i;
cout << sum ;
}
}
}
变量sum
给了我垃圾结果。
答案 0 :(得分:4)
没有确切的细节是不可能知道的,但最有可能的两种可能性是:
sum
在使用前未初始化为0 sum
的类型和范围。编辑:
编辑后的代码适用于小范围(请注意,对于较大范围,还应考虑问题#2)。
您可能误解了结果,尝试将endl
添加到cout << sum ;
答案 1 :(得分:1)
我不确定您是否向我们提供了所有信息。否则,对我而言,您似乎没有初始化sum
。
int sum = 0;
for (i = a; i <= b; i++) {
for (j = 2; j <= i; j++) {
if (!(i%j)&&(i!=j))
break;
if (j==i) {
cout << i << endl;
sum += i;
cout << sum;
}
}
}
答案 2 :(得分:1)
问题似乎只是您的格式。将结束循环更改为以下内容,输出将更加清晰(注意:在您的代码中,sum2未声明 - 我在所有这些之上添加了“int sum2 = 0”)
for (i = a; i <= b; i++)
{
for (j = 2; j <= i; j++) // Changed the < to <=, and got rid of semicolon
{
if (!(i%j) && (i!=j)) break;
if (j==i)
{
cout << "i = " << i << endl;
sum += i;
cout << "sum = " << sum << endl;
}
sum2 += sum ;
//cout << "sum2 = " << sum2 << endl;
}
}