#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。
问题在于它显示一些素数不是素数。
答案 0 :(得分:7)
for循环的主体根本不使用i
。
特别是,对于任何整数n % 1
,n
始终为零。
据推测,您想知道n
是否可被i
整除,但意外检查n
是否可以被1整除。
您可以通过单步执行调试器并将各种子表达式变为“监视表达式”来轻松地发现此错误。