int mo[maxn], vis[maxn], prime[maxn];
void init () {
mo[1] = 1;
mem(vis, 0);
int len = 0;
for (int i = 2; i < maxn; ++i) {
if (!vis[i]) {
prime[len++] = i;
mo[i] = -1;
}
for (int j = 0; j < len && (LL)prime[j] * i < maxn; ++j) {
vis[ i * prime[j] ] = 1;
if (i % prime[j] == 0) {
mo[ i * prime[j] ] = 0;
break;
}
mo[ i * prime[j] ] = -mo[i];
}
}
// for (int i = 2; i < maxn; ++i) mo[i] += mo[i-1];
}
莫比乌斯函数线性筛
最新推荐文章于 2022-05-03 22:51:16 发布