一、
紫书内的代码
memset(vis,0,sizeof(vis));
for(int i=2;i<=n;i++)
for(int j=i*i;j<=n;j+=i)
vis[j]=1;
//优化
int m=sqrt(n+0.5);
memset(vis,0,sizeof(vis));
for(int i=2;i<=m;i++)
if(!vis[i])
for(int j=i*i;j<=n;j+=i)
vis[j]=1;
二、记录素数的位置(别人的)
int prime[maxn]; //记录素数
bool is_prime[maxn]; //记录是否是素数
int Eratosthenes(int n){
int num = 0;
for(int i = 0; i <= n; ++i)
is_prime[i] = true;//假设全部都是素数
is_prime[0] = is_prime[1] = false;
for (int i = 2; i <= n; ++i){
if(is_prime[i]){
prime[num++] = i;
for(int j = i + i; j <= n; j += i)
is_prime[j] = false;
}
}
return p; //返回素数个数
}