我目前正在尝试解决欧拉计画的问题之一,以找到第10001个素数。虽然我的代码没有返回正确的数字,但是当我更改“ count”的起始值时甚至返回了偶数。下面是我的代码,如果有人可以帮助我,将不胜感激。
#include <math.h>
#include <iostream>
#include <stdbool.h>
using namespace std;
bool isPrime(int num);
int main()
{
int num = 0, count = 0;
while(count < 10001)
{
num++;
while(isPrime(num) != true)
{
num++;
cout << "\n num: " << num;
}
count++;
isPrime(12);
}
cout << "the 10001's prime number is: " << num << "\n " << count;
system("pause");
return 0;
}
bool isPrime(int num)
{
bool checkPrime = false;
if(num%2 != 0)
{
for(int i = 3; i <= sqrt(num); i++)
{
if(num%i != 0)
{
checkPrime = true;
}
else
{
checkPrime = false;
break;
}
}
}
else
{
return false;
}
if(checkPrime)
{
return true;
}
else
{
return false;
}
}
最佳答案
您在isPrime中的逻辑是错误的。 isPrime(3)例如返回false。基本问题是,您将checkPrime初始化为false而不是true,因此,即使它是素数,也不会进入for循环的任何小数字都将返回false。
这是一个(希望)正确的版本,还提供了Dukeling建议的一些更改。
bool isPrime(int num)
{
if (num < 2) // numbers less than 2 are a special case
return false;
bool checkPrime = true; // change here
int limit = sqrt(num);
for (int i = 2; i <= limit; i++)
{
if (num%i == 0)
{
checkPrime = false;
break;
}
}
return checkPrime;
}
关于c++ - 查找第10001个质数时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19091565/