#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10, M = 998244353;
int n, f[N], g[N], ans[N], phi[N], p[N], cnt, mu[N], vis[N];
void init() {
    phi[1] = mu[1] = 1;
    for (int i = 2; i <= n; i++) {
        if (!vis[i]) {
            p[++cnt] = i;
            phi[i] = i - 1;
            mu[i] = M - 1;
        }
        for (int j = 1; j <= cnt && p[j] * i <= n; j++) {
            vis[p[j] * i] = 1;
            if (i % p[j] == 0) {
                phi[p[j] * i] = phi[i] * p[j];
                break;
            }
            phi[p[j] * i] = phi[i] * (p[j] - 1);
            mu[p[j] * i] = (M - mu[i]) % M;
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j += i) {
            g[j] = (g[j] + 1ll * phi[j / i] * i) % M;
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j += i) {
            f[j] = (f[j] + 1ll * mu[j / i] * g[i]) % M;
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= n; j += i) {
            ans[j] = (ans[j] + 1ll * f[i] * (j / i)) % M;
        }
    }
}
int main() {
    scanf("%d", &n);
    init();
    for (int i = 1; i <= n; i++) {
        printf("%d ", ans[i]);
    }
    return 0;
}
求和函数 f(n) 的值 - C++ 代码实现

原文地址: https://www.cveoy.top/t/topic/f8S5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录