(1)基本除法筛
#include <iostream>
using namespace std;
bool check(int x)
{
if(x<2) return false;
for(int i=2;i<x/i;i++)
{
if(x%i==0) return false;
}
return true;
}
(2)艾氏筛法 O(nloglogn)///筛后,prime数组存放连续质数
#include <iostream>
using namespace std;
const int N=xx;
int prime[N];
bool st[N];
int cnt=0;
void get_prime(int x)
{
for(int i=2;i<=x/i;i++)
{
if(!st[i]) {
prime[cnt++] =i;
for(int j=2*i;j<=x;j+=i)
{
st[j]=true;
}
}
}
}
(3)线性筛 O(n)
#include<iostream>
using namespace std;
const int N=XX;
int prime[N];
bool st[N];
int cnt=0;
void get_prime(int x)
{
for(int i=2;i<=x/i;i++)
{
if(!st[i]) prime[cnt++]=i;
for(int j=0;prime[j] * i<=x;j++)
{
st[prime[j]*i]=true;
if(i%prime[j]==0) break;
}
}
}