-
Notifications
You must be signed in to change notification settings - Fork 77
/
Copy pathMobius.cpp
37 lines (34 loc) · 817 Bytes
/
Mobius.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <bits/stdc++.h>
using namespace std;
vector<int> mobius(int n) {
vector<int> prime;
vector<int> mu(n + 1);
vector<bool> isComposite(n + 1, false);
mu[1] = 1;
for (int i = 2; i < n; ++i) {
if (!isComposite[i]) {
prime.push_back(i);
mu[i] = -1;
}
for (int j = 0; j < prime.size() && i * prime[j] <= n; ++j) {
isComposite[i * prime[j]] = true;
if (i % prime[j] == 0) {
mu[i * prime[j]] = 0;
break;
} else {
mu[i * prime[j]] = mu[i] * mu[prime[j]];
}
}
}
return mu;
}
signed main() {
int n;
cin >> n;
vector<int> mu = mobius(n);
for (int i : mu) {
cout << i << ' ';
}
cout << '\n';
return 0;
}