注册 登录
编程论坛 C++教室

有关打素数表的问题

xry123 发布于 2016-02-20 21:38, 1829 次点击
自己写的是埃式筛,当素数最大值破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亿以内的素数打表的方法?
0 回复
1