给定正整数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 著作权归作者所有。请勿转载和采集!

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