素数筛

 1 void daa()
 2 {
 3     int k=0;
 4     for(int i=2;i<100000;i++)
 5     {
 6         if(x[i]==0)
 7         {
 8             prime[k]=i;
 9             for(int j=i*2; j<100000; j+=i)
10                 x[j]=1;
11             k++;
12         }
13     }
14 }
View Code
//黑历史不忍卒睹
const int N = 1e6 + 10;

int prime[N];
int cnt = 0;
//O(n*loglogn)
void pri()
{
	memset(vis, 0, sizeof(vis));
	for(int i = 2; i < N; i++)
	{
		if(!vis[i])
		{
			for(int j = i + i; j < N; j += i)
				if(!vis[j])
					vis[j] = 1;
			prime[cnt++] = i;
		}
	}
}
//O(n)
void Sieve()
{	
	memset(vis, 0, sizeof(vis));
    for(int i=2;i<N;i++)
    {
        if(!vis[i]) 
			prime[cnt++]=i;
        for(int j = 0; j < cnt && i * prime[j] < N; j++)
        {
            vis[i * prime[j]] = 1;
            if(0 == (i % prime[j]))
				break;
        }
    }
}

原文地址:https://www.cnblogs.com/Yumesenya/p/5230565.html