线性筛欧模板,算法复杂的O(n)
function init_prime(n) {
let mu = Array(n + 1).fill(0);
let prime = Array(n + 1).fill(0);
mu[1] = 1;
for (i = 2; i <= n; i++) {
if (!prime[i]) {
prime[++prime[0]] = i;
mu[i] = -1;
}
for (j = 1; prime[j] * i <= n; j++) {
prime[prime[j] * i] = 1;
if (i % prime[j] == 0) {
mu[prime[j] * i] = 0;
break;
}
mu[prime[j] * i] = -mu[i];
}
}
return mu;
}
function μ(num) {
return init_prime(num)[num];
}