首页 > 其他 > 详细

O(N) 筛素数

时间:2021-04-14 10:17:15      阅读:14      评论:0      收藏:0      [点我收藏+]

#define N 1000000
bool np[N];
vector<int> primes;

void init() {
for (int i = 2; i < N; ++i) {
if (!np[i]) primes.push_back(i);
for (int v : primes) {
if (v * i >= N) break;
np[v * i] = true;
if (i % v == 0) break;
}
}
}

bool np[N];
int phi[N], Min_factor[N], plist[10];
void initPrime() {
  cnt 0;
  phi[1] = 1;
  int x;
  for (int 2Ni++) {
    if (!np[i]) {
      plist[cnt++] = i;
      phi[i] = 1;
      Min_factor[i] = i;
    }
    for (int 0cnt && plist[k] * Nk++) {
      x plist[k] * i;
      np[x] = true;
      Min_factor[x] = plist[k];
      if (plist[k] == 0) {
        phi[x] = phi[i] * plist[k];
        break;
      } 
else {
        phi[x] = phi[i] * (plist[k] - 1);
      }
    }
  }
}

O(N) 筛素数

原文:https://www.cnblogs.com/zhanhb/p/14656153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!