C ++ Prime Number没有给出正确的答案

时间:2014-01-11 20:41:27

标签: c++ for-loop boolean sqrt

#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,则显示为prime。

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

1 个答案:

答案 0 :(得分:7)

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

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

据推测,您想知道n是否可被i整除,但意外检查n是否可以被1整除。

您可以通过单步执行调试器并将各种子表达式变为“监视表达式”来轻松地发现此错误。