有关打素数表的问题
自己写的是埃式筛,当素数最大值破1亿的时候时间要2S以上,网上的所谓线性时间筛法代码如下:#include<iostream>
using namespace std;
const long N = 200000;
long prime[N] = {0},num_prime = 0;
int isNotPrime[N] = {1, 1};
int main()
{
for(long i = 2 ; i < N ; i ++)
{
if(! isNotPrime[i])
prime[num_prime ++]=i;
//关键处1
for(long j = 0 ; j < num_prime && i * prime[j] < N ; j ++)
{
isNotPrime[i * prime[j]] = 1;
if( !(i % prime[j] ) ) //关键处2
break;
}
}
return 0;
}
不知道为什么当把N调到1亿时进行编译要过好久才会显示出控制台并且也没有那么快,是编译器的问题吗?
还有就是,除了这个以外有没有其他的可以1S内把1亿以内的素数打表的方法?