偶数项组合数之和在 n>=1 时等于 2^(n-1),用快速幂取模。
P3414 SAC#1 - 组合数
GESP8 冲刺课堂页:先建模,再压缩状态,最后读代码。
一、先回答问题
按 n 枚举组合数,n 到 1e18 完全不可能。
二、核心观察
利用二项式恒等式:总和 2^n,奇偶项和相等。
为什么不丢答案:把 (1+1)^n 与 (1-1)^n 相加,奇数项抵消,只剩偶数项。
n
指数 n-1
mod
三、互动演示
步骤1
关键状态 A-
关键状态 B-
答案/目标-
复杂度看表
课堂动作手推
点击下一步开始。
四、自己选答案
n=0 的答案是什么?
先判断,再点按钮。
为什么要快速幂?
先判断,再点按钮。
五、手推结果
| 公式 | 结果 |
|---|---|
| 所有项 | 2^n |
| 交替和 | 0 |
| 偶数项 | 2^(n-1) |
课堂要求:每题先说清对象、关系、保留的信息、压缩掉的信息,再写代码。
六、C++14 参考代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 6662333;
// 快速幂计算 (base^exp) % mod
ll power(ll base, ll exp) {
ll res = 1;
base %= MOD;
while (exp > 0) {
if (exp % 2 == 1) res = (res * base) % MOD;
base = (base * base) % MOD;
exp /= 2;
}
return res;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n;
if (!(cin >> n)) return 0;
if (n == 0) {
cout << 1 << endl;
} else {
// 偶数项之和为 2^(n-1)
cout << power(2, n - 1) << endl;
}
return 0;
}