错误集
数学 组合数 RE WA 古代猪文:
inline int C(int n, int m, int i) {
return fact[n][i] * Pow(fact[m][i] * fact[n - m][i] % p[i], p[i] - 2, i) % p[i];
}
inline int Lucas(int n, int m, int i) {
return m ? Lucas(n / p[i], m / p[i], i) * C(n % p[i], m % p[i], i) % p[i] : 1;
}
\(\Large{to}\)
inline int C(int n, int m, int i) {
if (n < m) return 0;
return fact[n][i] * Pow(fact[m][i] * fact[n - m][i] % p[i], p[i] - 2, i) % p[i];
}
inline int Lucas(int n, int m, int i) {
if (n < m) return 0;
return m ? Lucas(n / p[i], m / p[i], i) * C(n % p[i], m % p[i], i) % p[i] : 1;
}
具体表现:if (n < m) return 0; 没判断使得 \(n\) 或 \(m\) 可能小于 \(0\) 造成 RE(访问其他的内存并篡改)从而引起 WA。

浙公网安备 33010602011771号