【问题标题】:Finding Prime Numbers between Two Numbers查找两个数之间的质数
【发布时间】:2012-05-13 12:49:17
【问题描述】:

我试图找到两个给定数字之间的所有素数并将素数相加。

我有这个循环可以正确检测素数。

但是,由于某种原因,我不知道如何对所有素数求和。

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 给了我垃圾结果。

【问题讨论】:

  • 修正格式并使用合理的变量名,谢谢...
  • 您是否将其 (sum) 初始化为零?范围是多少? sum 的类型是什么?您也可能遇到溢出,具体取决于范围。
  • 我确实做到了 int sum = 0 ;
  • 您的外部for 循环没有结束大括号。
  • 如果这个问题..它没有运行它运行

标签: c++


【解决方案1】:

没有确切的细节是不可能知道的,但最可能的两种可能性是:

  1. sum 在使用前未初始化为 0
  2. 您遇到的是overflow,因为数字的总和太大而无法放入其中。这显然取决于sum 的类型和范围。

编辑:

编辑后的代码适用于我,适用于小范围(请注意,对于较大的范围,还应考虑问题 #2)。
您可能误读了结果,请尝试将endl 添加到cout &lt;&lt; sum ;

【讨论】:

  • 我已经用零初始化它仍然给我这个结果
  • ab 的数字有多大?
  • @Mahmoud:至少或小范围 - 它适用于我。也许您误读了结果,因为您忘记了endl in:cout &lt;&lt; sum ;
  • @amit,这正是我运行后的想法。从 5 到 8,您会看到 5 57 12
  • 谢谢@amit .. 我不知道 endl 是如何修复它的结果是奇怪的零和数字总的来说.. 谢谢 ,,,,
【解决方案2】:

我不确定您是否向我们提供了所有信息。否则,对我来说,您似乎没有初始化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;
        }
    }

}

【讨论】:

    【解决方案3】:

    问题似乎只是您的格式。将结束循环更改为以下内容,输出会更清晰(注意:在您的代码中,未声明 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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      • 2018-01-07
      • 2012-01-12
      • 2014-06-26
      • 2015-04-08
      • 2017-08-07
      • 2020-01-11
      相关资源
      最近更新 更多