【发布时间】:2015-11-23 16:11:24
【问题描述】:
代码运行得很好,但不是使用“for循环”来迭代到 200000 ,我认为可以有更好的选择,但我很难找到它。我需要帮助来优化这个解决方案。这个解决方案目前花费的时间是 56 毫秒。
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int isPrime(long long int number)
{
int i;
for (i=2; i*i<=number; i++) {
if (number % i == 0) return 0;
}
return 1;
}
int returnNPrime(int N)
{
int counter = 0;
int i ;
if(N == 1) return 2;
for(i=3;i<200000;i+=2)
{
if(isPrime(i))
{
counter++;
if(counter == (N-1))
return i;
}
}
return 0;
}
int main(int argc, char *argv[])
{
printf("%d",returnNPrime(10001));
return 0;
}
【问题讨论】:
-
谷歌“埃拉托色尼筛”
-
另外搜索“prime number”,你会发现上千个以前的问题。
-
提示:不要测试大量整数
i和for (i=2; i*i<=number; i++) { if (number % i == 0) return 0;,只需测试一个较小的素数列表。 IOW,随时跟踪他们。
标签: c project number-theory