欧拉筛
时间复杂度O(n)
#include <iostream>
#include <cstring>
using namespace std;
#define maxn 1000 //按实际自定义大小
int vis[maxn]; //VIS数组 用来判断每个数是否素数
int prime[maxn]; //prime数组用来记录素数
void visitPrime(void);
void visitPrime()
{
memset(vis,0,sizeof(vis)); //初始化 默认值为0都为素数
memset(prime,0,sizeof(prime));
for(int i=2;i<=maxn;i++)
{
if(!vis[i]) //如果是素数
prime[++prime[0]]=i; //prime[0]相当于计数器cnt 记录素数的个数
for(int j=1;j<=maxn&&i*prime[j]<=maxn;j++)
{
vis[i*prime[j]]=1;
if(i%prime[j]==0) //如果i是当前素数的倍数 就跳出循环 防止重复筛去
break;
}
}
}