如何优化这个代码?
查看原帖
如何优化这个代码?
1285950
4041nofoundGeoge楼主2024/11/9 12:52
#include <iostream>
#include <vector>

using namespace std;

const int MOD = 998244353;

// 快速幂
long long power(long long base, long long exp) {
    long long result = 1;
    while (exp > 0) {
        if (exp % 2 == 1) {
            result = (result * base) % MOD;
        }
        base = (base * base) % MOD;
        exp /= 2;
    }
    return result;
}

// 预处理阶乘和阶乘的逆元
void preprocess(int n, vector<long long>& fact, vector<long long>& inv_fact) {
    fact[0] = 1;
    for (int i = 1; i <= n; ++i) {
        fact[i] = (fact[i - 1] * i) % MOD;
    }
    inv_fact[n] = power(fact[n], MOD - 2);
    for (int i = n - 1; i >= 0; --i) {
        inv_fact[i] = (inv_fact[i + 1] * (i + 1)) % MOD;
    }
}

int main() {
    int n, k;
    cin >> n >> k;

    vector<long long> fact(n + 1), inv_fact(n + 1);
    preprocess(n, fact, inv_fact);

    long long result = 0;
    for (int i = 1; i <= n; ++i) {
        long long ik_mod = power(i, k);
        long long ik_inv = power(ik_mod, MOD - 2);
        long long term = (fact[i] * ik_inv) % MOD;
        result = (result + term) % MOD;
    }

    cout << result << endl;
    return 0;
}
2024/11/9 12:52
加载中...