省选后数学学习

  省选差点被数学题送退役(指式子推复杂了,导致最后还有一个组合数模非质数,没写出来),决定重新学一些数学知识。

Lucas定理的证明

  上来先写一个理性愉悦。

  先来复习一下Lucas是啥:$inom{n}{m} \% p$ ,其中n,m比较大,p是一个不太大的质数;复杂度是预处理 $O(p)$,每次询问 $O(log_pm)$。

  首先证明一个引理:$(1+x)^pequiv1+x^ppmod p$,考虑使用二项式定理展开左边,得到:

  $sum_{i=0}^pinom{p}{i}x^i=sum_{i=0}^pfrac{p!}{i!(p-i)!}x^i=sum_{i=0}^pfrac{p(p-1)dots(p-i+1)}{i!}x^i$

  先不考虑 $i=0$ 的情况,在 $i eq p$ 时,因为 $p$ 是质数,所以分子上的 $p$ 是不可能与分母约分的,也就是说,当 $i eq p$ 时,$inom{p}{i}x^iequiv0 pmod p$.即,$(1+x)^p=sum_{i=0}^pinom{p}{i}x^i=inom{p}{p}x^p+inom{p}{0}x^0=1+x^ppmod{p}$

  不停使用这个引理,得到:$(1+x)^{p^i}=1+x^{p^i}pmod p$

  当然,用费马小定理似乎也可以直接证明这个引理就是了...

  现在整一个好玩的东西:组合数生成函数;

  $f(x)=sum_{i=0}^minom{m}{i}x^i=(1+x)^m$

  对 $m$ 进行 $p$ 进制拆分:$m=sum m_ip^i$

  $f(x)=(1+x)^{sum m_ip^i}=prod(1+x)^{m_ip^i}=prod((1+x)^{p^i})^{m_i}$

  $=prod (1+x^{p_i})^m=prod left(sumlimits_{j=0}^{m_i}inom{m_i}{j}x^{p^i imes j} ight)$

  $=prodleft(sumlimits_{n_i=0}^{p-1}inom{m_i}{n_i}x^{p^i imes n_i} ight)=sumleft(prodinom{m_i}{n_i} ight)x^{sum p^i n_i}$

  我们将它和最早的形式放到一起,就可以得到:$sum inom{m}{n}x^n=sumleft(prodinom{m_i}{n_i} ight)x^{sum p^i n_i}$

  两个生成函数相等,就意味着对应项的系数相等,可以得到:

  $inom{m}{n}=prodinom{m_i}{n_i}pmod p$

  于是就证明完啦。

斯特林数

  第一类斯特林数:把n个数分为m个非空环的方案数;

    递推:每个数可以选择自己新开一个环,或者插入之前任意一个数后边;

      $egin{bmatrix} n\m end{bmatrix}=egin{bmatrix} n-1\m-1 end{bmatrix}+(n-1) imes egin{bmatrix} n-1\m end{bmatrix}$

   第二类斯特林数:把n个数分为m个非空集合的方案数;

    递推:每个数可以选择自己新开一个集合,也可以加入之前的任意一个集合;

      $egin{Bmatrix} n\m end{Bmatrix}=egin{Bmatrix} n-1\m-1 end{Bmatrix}+m imes egin{Bmatrix} n-1\m end{Bmatrix}$

    容斥计算法:考虑有几个集合是空的;(要乘以阶乘的倒数是因为斯特林数中的集合是不区分的,但容斥式子中却是按区分来做的)

      $egin{Bmatrix} n\m end{Bmatrix}=frac{1}{m!}sum_{i=0}^m(-1)^iinom{m}{i}(m-i)^n$

  既然第二类斯特林数可以用幂来表示,那幂也可以由第二类斯特林数表示,思路依然是考虑有几个空集合。

    $n^k=sum_{i=0}^kinom{n}{i} imes i! imes  egin{Bmatrix} k\i end{Bmatrix}$

    (差点被上述式子送退役)

下降幂与上升幂

  下降幂:$n^{underline{m}}=prod_{i=0}^{m-1} (n-i)$

  普通幂转下降幂:$n^m=sum_{i=0}^m n^{underline{i}}egin {Bmatrix}m\iend{Bmatrix}$

    证明:听上去很高级,其实就是 $n^k=sum_{i=0}^kinom{n}{i} imes i! imes  egin{Bmatrix} k\i end{Bmatrix}$ 的另一种写法罢了...

  上升幂:$n^{overline{m}}=prod_{i=0}^{m-1} (n+i)$

  上升幂转普通幂:$n^{overline{m}}=sum_{i=0}^m n^{i}egin {bmatrix}m\iend{bmatrix}$

    证明:采用数学归纳法:$egin{align} x^{overline{n}}&=(x+n-1)x^{overline{n-1}}\ &=(x+n-1)sum_{k=0}^n egin{bmatrix}n-1\k end{bmatrix}x^k\ &=sum_{k=0}^n egin{bmatrix}n-1\k end{bmatrix}x^{k+1}+sum_{k=0}^n  egin{bmatrix}n-1\k end{bmatrix}x^k (n-1)\ &=sum_{k=1}^n egin{bmatrix}n-1\k-1 end{bmatrix}x^{k}+sum_{k=0}^n  egin{bmatrix}n-1\k end{bmatrix}x^k (n-1)\ &=sum_{k=0}^n x^k (egin{bmatrix} n-1\k-1end{bmatrix}+(n-1)egin{bmatrix}n-1\kend{bmatrix})\ &=sum_{k=0}^n egin{bmatrix}n\kend{bmatrix} x^kend{align}$

  上升幂转下降幂:$x^{overline n}=(-1)^n(-x)^{underline{n}}$

  下降幂转上升幂:$x^{underline n}=(-1)^n(-x)^{overline{n}}$

自然数幂次方和

  自然数幂次方和指的是这样的问题:$S_k(n)=sum_{i=0}^ni^k$

  先介绍一个用第二类斯特林数解决的方案,该方案适合k小,n大的情况。

  $S_k(n)=sum_{i=0}^ni^k$

  $=sum_{i=0}^nsum_{j=0}^kinom{i}{j} imes j! imes egin{Bmatrix} k\j end{Bmatrix}$

  $=sum_{j=0}^kj! imes egin{Bmatrix} k\j end{Bmatrix}sum_{i=0}^ninom{i}{j}$

  后面那个组合数的和怎么计算呢?考虑组合意义,对于任意一个 $inom{i}{j}$ 的方案,我们再额外选一个i+1进去...这样每种方案就相当于“在n+1个中选出j+1个”。也就是说 $sum_{i=0}^ninom{i}{j}=inom{n+1}{j+1}$;

  $S_k(n)=sum_{j=0}^kj! imes egin{Bmatrix} k\j end{Bmatrix}inom{n+1}{j+1}$

  这样就能快速计算自然数幂之和啦!

原文地址:https://www.cnblogs.com/shzr/p/13205150.html