【问题标题】:C++ Prime Number not giving the correct answer [closed]C++素数没有给出正确答案[关闭]
【发布时间】:2014-01-30 19:14:09
【问题描述】:
#include <iostream>
#include <cmath>

using namespace std;
bool prime(int n);

int main()
{
    double i;

    while (true)
    {
        cout << "Enter a number that isn't 0: ";
        cin >> i;
            if ( i == 0)
                break;
            if(prime(i))
                cout << i << " is prime" << endl;
            else
                cout << i << " is not prime." << endl;
    }
    system ("Pause");
    return 0;
}

bool prime (int n)
{
    int i;
    double sqrt_of_n = sqrt(double (n));
    for (i = 2; i <= sqrt_of_n; i++)
        {
            if (int(n) % 1 == 0)
            return false;
        }
    return true;
}

每次我运行程序时,如果我输入 7,我会发现 7 不是素数。有人可以帮我找出我搞砸的地方吗?

我尝试在 i 和 n 的 double 和 int 之间进行转换。

如果我输入 3,它会显示素数。

问题是它显示一些素数不是素数。

【问题讨论】:

  • 而不是得到 n 的平方根。您可以将 for 循环条件设置为 i*i &lt;= n,它与 i &lt;= sqrt_of_n 相同

标签: c++ for-loop boolean sqrt


【解决方案1】:

你的 for 循环体根本不使用 i

特别是,n % 1 始终为零,对于任何整数 n

想必你想知道n 是否能被i 整除,却不小心查到n 是否能被1 整除。

您可以很容易地自己发现这个错误,只需在调试器中单步执行,并将各种子表达式变成“监视表达式”。

【讨论】:

  • 我毫不畏惧地直接从一本名为 C++ 的书中复制了这个示例。这就是本书展示的方式。我该如何纠正这个错误?
  • @user3175649 如果这确实来自一本书,请拿另一本书...
  • @user3175649:我以为你可能复制了别人的代码。在某些时候,i 被转录为1,因为两者看起来非常相似。我不知道您是否犯了错误,或者它是在预发布过程中发生的。想想我说的,我不会直接给你答案,但这里有很多线索。
  • 哦!如果我用 i 替换 for 循环中的 1,它会修复它。我的错!谢谢:)
  • @user3175649:看看这里:stackoverflow.com/questions/388242/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2021-10-25
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多