
2条回答 默认 最新
真相重于对错 2021-11-23 12:28关注不要用递归,用递推。
还有计算 3^n ,数字会越界,大致代码如下long long PowerMod(long long a, long long b, int c) { long long ans = 1; a = a % c; while (b > 0) { if (b % 2 == 1) ans = (ans * a) % c; b = b / 2; a = (a * a) % c; } return ans; } int main() { unsigned long long f1 = 2, f0 = 1; unsigned long long f2 = 0; unsigned long long zeta = 0; int n; cin >> n; auto x =3*long long(pow(3, 37)); for (long long i = 2; i <= n; i++) { zeta = PowerMod(3, i, 100000007); f2 = (3 * f1+ 2 * f0 + i*zeta)%100000007; f0 = f1%100000007; f1 = f2; } cout << f2; }评论 打赏 举报解决 1无用