【发布时间】:2014-07-22 19:53:14
【问题描述】:
所以我创建了一个程序来查找第 10,001 个素数。这是该程序的主要内容:
int main(){
int i;
int j;
int count=0;
int currnumber=0;
for(i=1; count < 10002; i++){
if(isPrime(i)){
count++;
currnumber = i;
if(count == 10002)
printf("%i",currnumber);
}
}
}
这是我在自定义库中构建的 IsPrime 函数的代码:
long long isPrime(long long number){
long long i = 2;
if(number == 2)
return 1;
for(i=2;i<number;i++){
if(number % i == 0)
return 0;
}
if(i >= number && ((number % 1 == 0) && (number % number == 0)))
return 1;
}
当我运行该程序时,它可以工作并给我正确的答案(这是一个欧拉问题,所以我知道我做对了 :D),但处理过程至少需要 6 秒。所以我的问题是:
- 为什么要花这么长时间?这与我设置算法的方式有关吗?
- 如何改进我的代码以使其运行得更快?
提前致谢!
【问题讨论】:
-
查找“初筛”并编写一个简单的代码。你的做了很多不必要的测试(例如,一旦我们测试了一个数字不能被 2 整除,为什么还要测试任何偶数?)。
-
这个问题更适合codereview.stackexchange.com
-
试试
for(i=2;i<number;i++){,而不是for (i = 3; i < number; i += 2) {。遍历偶数是没有意义的,因为它们无论如何都不能是素数。 -
他不是要求找到 N 以下所有素数的最快方法,而是要求找到第 N 个素数的最快方法。这是不同的。
标签: c