【发布时间】:2015-01-03 15:32:46
【问题描述】:
这是我查找第 10000 个素数的代码,但它真的很慢,需要 7 秒来计算。
#include <stdio.h>
#include <stdlib.h>
long int prime (int n)
{
int i;
for(i=2;i<n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int i=2,counter=0;
while(1)
{
if(prime(i))
counter++;
if(counter==10000)
break;
i++;
}
printf("10000th prime number is: %d",i);
}
这是蛮力方法,所以这可能是它如此缓慢的原因。 我认为问题可能是它必须多次调用函数。那么你认为它可以优化什么,或者最好找到一些数学公式。
【问题讨论】:
-
你的
prime()函数运行从2到n,但实际上你只需要检查从2到sqrt(n) -
你也只需要测试奇数。
-
stackoverflow.com/questions/622/… 。也许你可以看看这个链接。
-
这很快:
puts("10000th prime number is: 104729");
标签: c