数学
卢卡斯定理
对于素数 p,有
\(\binom{n}{k}\equiv \binom{\lfloor n/p\rfloor}{\lfloor k/p\rfloor}\binom{n\bmod p}{k\bmod p}\pmod p.\)
其中,当 n<k 时,二项式系数 \(\dbinom{n}{k}\) 规定为 0。
范德蒙德卷积
\(\sum_{i=0}^k\binom{n}{i}\binom{m}{k-i}=\binom{n+m}{k}\)
斐波那契数列的gcd
\(gcd(f_i,f_j)=f_{gcd(i,j)}\)
Miller-Rabin素数检测
假设我们要判断一个大整数 \(n > 3\) 是否为素数。
-
写成特定形式:
\(n - 1 = 2^s \cdot d, \quad d \text{ 是奇数}\)
也就是把 \(n-1\) 分解成 \(2^s\) 乘上一个奇数 \(d\)。 -
随机选择底数 \(a\)
从 \([2, n-2]\) 中随机选择一个整数 \(a\)。 -
进行幂取模测试
计算:
\(x = a^d \mod n\) -
检查素性条件
• 如果 \(x = 1\) 或 \(x = n-1\),则 n 有可能是素数。
• 否则,重复平方 \(x = x^2 \mod n\),最多重复 \(s-1\) 次:
• 如果过程中出现 \(x = n-1\),说明 n 可能是素数。
• 如果一直没有出现 \(n-1\),则 \(n\) 一定是合数。
- 多轮测试
选择多个不同的 \(a\) 进行测试,增加准确性。若所有轮次都通过测试,则 \(n\) 极大可能是。