Loading docs/math/fibonacci.md +2 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,8 @@ $$ $p$ 的剩余系大小为 $p$ ,意味着在前 $p^2+1$ 个数对中必有两个相同的数对,于是这两个数对可以往后生成相同的斐波那契数列,那么他们就是周期性的。 事实上,我们有一个远比它要强的结论。模 $n$ 意义下斐波那契数列的周期被称为[皮萨诺周期](https://en.wikipedia.org/wiki/Pisano_period)([OEIS A001175](http://oeis.org/A001175)),该数可以证明总是不超过 $6n$,且只有在满足 $n=2\times 5^k$ 的形式时才取到等号。 ## 习题 - [SPOJ - Euclid Algorithm Revisited](http://www.spoj.com/problems/MAIN74/) Loading docs/math/lucas.md +30 −1 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ $$ 观察上述表达式,可知 $n\bmod p$ 和 $m\bmod p$ 一定是小于 $p$ 的数,可以直接求解, $\displaystyle\binom{\left\lfloor n/p \right\rfloor}{\left\lfloor m/p\right\rfloor}$ 可以继续用 Lucas 定理求解。这也就要求 $p$ 的范围不能够太大,一般在 $10^5$ 左右。边界条件:当 $m=0$ 的时候,返回 $1$ 。 时间复杂度为 $O(p\log_{p}{n})$ 。 时间复杂度为 $O(p + \log_{p}{n})$ 。 ### 代码实现 Loading @@ -23,6 +23,35 @@ long long Lucas(long long n, long long m, long long p) { } ``` ### Lucas 定理的证明 考虑 $\displaystyle\binom{p}{n} \bmod p$ 的取值,注意到 $\displaystyle\binom{p}{n} = \frac{p!}{n!(p-n)!}$,分子的质因子分解中 $p$ 次项恰为 $1$,因此只有当 $n = 0$ 或 $n = p$ 的时候 $n!(p-n)!$ 的质因子分解中含有 $p$,因此 $\displaystyle\binom{p}{n} \bmod p = [n = 0 \vee n = p]$。进而我们可以得出 $$ \begin{align} (a+b)^p &= \sum_{n=0}^p \binom pn a^n b^{p-n}\\ &\equiv \sum_{n=0}^p [n=0\vee n=p] a^n b^{p-n}\\ &\equiv a^p + b^p \pmod p \end{align} $$ 注意过程中没有用到费马小定理,因此这一推导不仅适用于整数,亦适用于多项式。因此我们可以考虑二项式 $f(x)=(ax^n + bx^m)^p \bmod p$ 的结果 $$ \begin{align} (ax^n + bx^m)^p &\equiv a^p x^{pn} + b^p x^{pm} \\ &\equiv ax^{pn} + bx^{pm}\\ &\equiv f(x^p) \end{align} $$ 考虑二项式 $(1+x)^n \bmod p$,那么 $\displaystyle\binom n m$ 就是求其在 $x^m$ 次项的取值。使用上述引理,我们可以得到 $$ \begin{align} (1+x)^n &\equiv (1+x)^{p\lfloor n/p \rfloor} (1+x)^{n\bmod p}\\ &\equiv (1+x^p)^{\lfloor n/p \rfloor} (1+x)^{n\bmod p} \end{align} $$ 注意前者只有在 $p$ 的倍数位置才有取值,而后者最高次项为 $n\bmod p \le p-1$,因此这两部分的卷积在任何一个位置只有最多一种方式贡献取值,即在前者部分取 $p$ 的倍数次项,后者部分取剩余项,即 $\displaystyle\binom{n}{m}\bmod p = \binom{\left\lfloor n/p \right\rfloor}{\left\lfloor m/p\right\rfloor}\cdot\binom{n\bmod p}{m\bmod p}\bmod p$。 ## exLucas 定理 Lucas 定理中对于模数 $p$ 要求必须为素数,那么对于 $p$ 不是素数的情况,就需要用到 exLucas 定理。 Loading Loading
docs/math/fibonacci.md +2 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,8 @@ $$ $p$ 的剩余系大小为 $p$ ,意味着在前 $p^2+1$ 个数对中必有两个相同的数对,于是这两个数对可以往后生成相同的斐波那契数列,那么他们就是周期性的。 事实上,我们有一个远比它要强的结论。模 $n$ 意义下斐波那契数列的周期被称为[皮萨诺周期](https://en.wikipedia.org/wiki/Pisano_period)([OEIS A001175](http://oeis.org/A001175)),该数可以证明总是不超过 $6n$,且只有在满足 $n=2\times 5^k$ 的形式时才取到等号。 ## 习题 - [SPOJ - Euclid Algorithm Revisited](http://www.spoj.com/problems/MAIN74/) Loading
docs/math/lucas.md +30 −1 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ $$ 观察上述表达式,可知 $n\bmod p$ 和 $m\bmod p$ 一定是小于 $p$ 的数,可以直接求解, $\displaystyle\binom{\left\lfloor n/p \right\rfloor}{\left\lfloor m/p\right\rfloor}$ 可以继续用 Lucas 定理求解。这也就要求 $p$ 的范围不能够太大,一般在 $10^5$ 左右。边界条件:当 $m=0$ 的时候,返回 $1$ 。 时间复杂度为 $O(p\log_{p}{n})$ 。 时间复杂度为 $O(p + \log_{p}{n})$ 。 ### 代码实现 Loading @@ -23,6 +23,35 @@ long long Lucas(long long n, long long m, long long p) { } ``` ### Lucas 定理的证明 考虑 $\displaystyle\binom{p}{n} \bmod p$ 的取值,注意到 $\displaystyle\binom{p}{n} = \frac{p!}{n!(p-n)!}$,分子的质因子分解中 $p$ 次项恰为 $1$,因此只有当 $n = 0$ 或 $n = p$ 的时候 $n!(p-n)!$ 的质因子分解中含有 $p$,因此 $\displaystyle\binom{p}{n} \bmod p = [n = 0 \vee n = p]$。进而我们可以得出 $$ \begin{align} (a+b)^p &= \sum_{n=0}^p \binom pn a^n b^{p-n}\\ &\equiv \sum_{n=0}^p [n=0\vee n=p] a^n b^{p-n}\\ &\equiv a^p + b^p \pmod p \end{align} $$ 注意过程中没有用到费马小定理,因此这一推导不仅适用于整数,亦适用于多项式。因此我们可以考虑二项式 $f(x)=(ax^n + bx^m)^p \bmod p$ 的结果 $$ \begin{align} (ax^n + bx^m)^p &\equiv a^p x^{pn} + b^p x^{pm} \\ &\equiv ax^{pn} + bx^{pm}\\ &\equiv f(x^p) \end{align} $$ 考虑二项式 $(1+x)^n \bmod p$,那么 $\displaystyle\binom n m$ 就是求其在 $x^m$ 次项的取值。使用上述引理,我们可以得到 $$ \begin{align} (1+x)^n &\equiv (1+x)^{p\lfloor n/p \rfloor} (1+x)^{n\bmod p}\\ &\equiv (1+x^p)^{\lfloor n/p \rfloor} (1+x)^{n\bmod p} \end{align} $$ 注意前者只有在 $p$ 的倍数位置才有取值,而后者最高次项为 $n\bmod p \le p-1$,因此这两部分的卷积在任何一个位置只有最多一种方式贡献取值,即在前者部分取 $p$ 的倍数次项,后者部分取剩余项,即 $\displaystyle\binom{n}{m}\bmod p = \binom{\left\lfloor n/p \right\rfloor}{\left\lfloor m/p\right\rfloor}\cdot\binom{n\bmod p}{m\bmod p}\bmod p$。 ## exLucas 定理 Lucas 定理中对于模数 $p$ 要求必须为素数,那么对于 $p$ 不是素数的情况,就需要用到 exLucas 定理。 Loading