Möbius function
:::note Resources https://codeforces.com/blog/entry/53925 :::
std::vector<int32_t> linear_sieve_with_mobius(int32_t n) { std::vector<int32_t> primes; std::vector<int32_t> lowest_prime(n, 0); std::vector<int32_t> mobius(n); mobius[1] = 1; for (int64_t i = 2; i < n; ++i) { if (lowest_prime[i] == 0) { primes.push_back(i); lowest_prime[i] = i; mobius[i] = -1; } for (auto const& p : primes) { if (p > lowest_prime[i]) break; if (auto j = i * p; j < n) { lowest_prime[j] = p; mobius[j] = (lowest_prime[i] == p) ? 0 : -mobius[i]; } } } return mobius;}
Time Complexity:
Theory
Section titled “Theory”Definition 1
Section titled “Definition 1”- if n is a square-free positive integer with an even number of prime factors.
- if n is a square-free positive integer with an odd number of prime factors.
- if n has a squared prime factor.
Definition 2
Section titled “Definition 2”Alternately, is a multiplicative function defined by .
Möbius Inversion Formula
Section titled “Möbius Inversion Formula”The classic version states that if g and f are arithmetic functions satisfying
then
where is the Möbius function