素数筛

//埃氏筛
void Era(int qwq){
    for(int i=2;i<=qwq;i++){
        if(vis[i])continue;//是合数就不执行
        for(int j=i*2;j<=qwq;j+=i)
            vis[j]=true;//j=i的倍数,每次加i,即为i的倍数每次加1,p数组的第j个元素标为合数
    }
}
//欧拉筛
int Eratosthenes(int n) {
  int p = 0;
  is_prime[0] = is_prime[1] = 1;
  for (int i = 2; i <= n; ++i) {
    if (!is_prime[i]) {
      prime[p++] = i;  // prime[p]是i,后置自增运算代表当前素数数量
      for (int j = i * i; j <= n; j += i) // 因为从 2 到 i - 1 的倍数我们筛过了从 i 的倍数开始
        is_prime[j] = 1;  //是i的倍数的均不是素数
    }
  }
  return p;
}
    
posted @ 2021-02-21 23:00  Carrot_Rui  阅读(57)  评论(0)    收藏  举报