【发布时间】:2016-02-16 03:34:45
【问题描述】:
所以...它适用于小数字,但如果 temp 大于 1000,它只会打印 0 或随机数...
#include <stdio.h>
int main() {
int primes[10001];
primes[10000] = 0;
int i,temp;
int n = 2;
temp = 0;
while(temp<=1000){
for(i=2; i<n; i++){
if(n%i == 0){
goto Exit;
}
}primes[temp] = n; temp ++;
Exit:
n ++;
}
for(i=0; i<10001; i++){
printf("%d\n",primes[i]);
}
return 0;
}
【问题讨论】:
-
while(temp<=1000){-->while(temp<=10000){ -
您只需将
i循环到sqrt(n)即可将算法速度提高378 倍。要计算滚动 sqrt 值:初始化nr = 0。此外,在顶部添加 2 作为素数。然后在while(temp...)和你的for循环插入:while ((nr * nr) < n) nr += 1;。然后将 for 循环更改为for (i = 3; i <= nr; ++i)对于前 30003 个素数,这会将运行时间从 68.95 秒减少到 0.18 秒