- P142's solution
-
题解P142
- @ 2025-11-9 12:15:40
莫比乌斯函数解释:
- 当 时,;
- 当 是 个不同质数的乘积时,;
- 当 有平方因子时(即存在质数 使得 整除 ),。
所以,按题意模拟即可。
AC code:
#include <bits/stdc++.h>
using namespace std;
long long mobius_sum(int n) {
vector<int> mu(n + 1, 0);
vector<int> primes;
vector<bool> is_prime(n + 1, true);
mu[1] = 1;
for (int i = 2; i <= n; ++i) {
if (is_prime[i]) {
primes.push_back(i);
mu[i] = -1;
}
for (int p : primes) {
if (i * p > n) break;
is_prime[i * p] = false;
if (i % p == 0) {
mu[i * p] = 0;
break;
} else {
mu[i * p] = -mu[i];
}
}
}
long long sum = 0;
for (int i = 1; i <= n; ++i) {
sum += mu[i];
}
return sum;
}
int main() {
int n;
cin >> n;
long long result = mobius_sum(n);
cout << result << endl;
return 0;
}