两种筛选素数的方法(ACM笔记)

第一个是Eratosthenes,原理简单,复杂度是nloglogn,基本够用了

#include 
#include 
#include 

using namespace std;
const int n=1e6+5;
int a[1000010];
void Eratosthenes_prime()
{
    int m=sqrt(n+0.5);
    for(int i=2;i

 第二是欧拉筛法,稍微复杂点,复杂度是n

#include 
#include 

using namespace std;

const int MAXN=3000001;
int prime[MAXN];//保存素数
bool vis[MAXN];
int Prime(int n)
{
	int cnt=0;
	memset(vis,0,sizeof(vis));
	for(int i=2;i

 

你可能感兴趣的:(acm,算法)