1 条题解

  • 0
    @ 2025-11-9 12:15:40

    莫比乌斯函数解释:

    • 当 n=1n = 1 时,μ(n)=1\mu(n) = 1;
    • 当 nn 是 kk 个不同质数的乘积时,μ(n)=(−1)k\mu(n) = (-1) ^ k;
    • 当 nn 有平方因子时(即存在质数 pp 使得 p2p ^ 2 整除 nn),μ(n)=0\mu(n) = 0。

    所以,按题意模拟即可。

    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;
    }
    
    • 1

    信息

    ID
    142
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    8
    已通过
    3
    上传者