25分除了前5个点全部WA求助
查看原帖
25分除了前5个点全部WA求助
1074084
asd890123楼主2025/8/3 09:38
#include<bits/stdc++.h>
const int mod = 998244353,N = 1e6 + 5;
int qpow(int a,int b){
    int res = 1;
    for (;b;b >>= 1){
        if (b & 1) res = 1LL * res * a % mod;
        a = 1LL * a * a % mod;
    }
    return res;
}
bool notPrime[N];
int prime[N],p;
int main(){
    std::cin.tie(0)->sync_with_stdio(0);
    int n;std::cin >> n;
    notPrime[0] = notPrime[1] = 1;
    for (int i = 2;i <= n;i++){
        if (!notPrime[i]) prime[++p] = i;
        for (int j = 1;j <= p && i * prime[j] <= n;j += i){
            notPrime[i * prime[j]] = 1;
            if (i % prime[j] == 0) break;
        }
    }
    int c = n - p,facn = 1;
    int invp = qpow(p + 1,mod - 2),inv2 = qpow(2,mod - 2);
    for (int i = 1;i <= n;i++) facn = 1LL * facn * i % mod;
    int ans = 1LL * c * (c - 1) % mod * facn % mod * inv2 % mod * inv2 % mod;
    for (int i = 1;i <= n;i++)
        if (notPrime[i]){
            int k = std::lower_bound(prime + 1,prime + 1 + p,i) - prime - 1;
            ans = (ans + 1LL * facn * invp % mod * inv2 % mod * (k * (k + 1LL) % mod + 1LL * (p - k) * (p - k + 1) % mod)) % mod;
        }
    std::cout << ans << '\n';
    return 0;
}
2025/8/3 09:38
加载中...