#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,它会显示质数。
问题是它将一些质数显示为非质数。
发布于 2014-01-12 04:43:05
您的for循环的主体根本不使用i。
特别是,对于任何整数n,n % 1始终为零。
您可能想知道n是否可以被i整除,但是意外地检查了n是否可以被1整除。
通过在调试器中单步执行,并将各种子表达式转换为“监视表达式”,您可以很容易地发现这个错误。
https://stackoverflow.com/questions/21067616
复制相似问题