【发布时间】:2017-01-09 16:03:50
【问题描述】:
我有一个从 Project Euler 获得的主要测试算法,但是当 43 作为输入传递时它返回 false。概述中给出了伪代码,我将其转换为 c++ 代码。我可能在转换伪代码时犯了一个错误。该算法的实际问题是什么?
#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int n)
{
if(n <= 1)
{
return false;
}
else if(n < 4)
{
return true;
}
else if(n % 2 == 0)
{
return false;
}
else if(n < 9)
{
return true;
}
else if(n % 3 == 0)
{
return false;
}
else
{
int r = sqrt(n);
int f = 5;
while(f <= r)
{
if(n % f == 0)
{
return false;
}
if((n + 2) % f == 0)
{
return false;
}
f = f + 6;
}
return true;
}
}
int main()
{
cout << is_prime(43);
system("PAUSE");
return 0;
}
【问题讨论】:
-
大量括号和冗余
elses 使您的代码不可读 -
用值 43 调试它。然后你会看到哪里出了问题。如果您不喜欢调试器,请使用 printf-debugging。
-
您在循环中的第二个测试是
(43 + 2) % 5 == 0,这显然是正确的。 -
编辑它以删除多余的条件
标签: c++ algorithm testing primes