求解组合数列的模运算:高效算法实现
给定正整数n和k,设 a_i = 27 * (3^i - 1) / 2,求解以下式子的模运算结果:
∑_(i=1)^n i! * k^(a_i) mod 20090327
算法实现:
#include <iostream>
#include <algorithm>
using namespace std;
const int MOD = 20090327;
long long fac[1000005]; // 预处理阶乘
long long power[1000005]; // 预处理k^(a_i)
int main() {
int n, k;
cin >> n >> k;
fac[0] = 1;
for (int i = 1; i <= n; i++) {
fac[i] = (fac[i - 1] * i) % MOD;
}
power[0] = 1;
long long tmp = 1;
for (int i = 1; i <= n; i++) {
tmp = (tmp * 3) % MOD;
power[i] = (power[i - 1] * (tmp - 1) / 2) % MOD; // 计算k^(a_i)
}
long long ans = 0;
for (int i = 1; i <= n; i++) {
ans = (ans + (fac[i] * power[i]) % MOD) % MOD;
}
cout << ans << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/nbKA 著作权归作者所有。请勿转载和采集!