zoukankan      html  css  js  c++  java
  • 「不会」crt,excrt,lucas,exlucas

    只是补一些其他人早就会的东西。
    $$Chinese remainder theorem$$
    用于解
    $xequiv amod M$
    满足
    $xequiv a_1mod m_1$
    $xequiv a_2mod m_2$
    $xequiv a_3mod m_3$
    $forall i,j,gcd(m_i,m_j)==1 && prod m_i=M$

    因为互质可以知道一定有解
    考虑构造一个可行解出来,例如对每个方程,给$x$加上一个数$y$
    满足$y=k*frac{M}{m_i}&&yequiv a_imod m_i$
    自然地想到$y=a_i*frac{M}{m_i}*inv(frac{M}{m_i},m_i)$

    $$Ex Chinese remainder theorem$$
    用于解

    $xequiv amod M$

    满足

    $xequiv a_1mod m_1$

    $xequiv a_2mod m_2$

    $xequiv a_3mod m_3$

    $exists i,j,gcd(m_i,m_j)>1 && lcm(m_i)=M$

    $m_i$不保证互质,不一定有解,而且只能知道$mod lcm(m_i)$的准确值

    考虑构造一个解出来,希望套用前面的做法但是此时不互质了可能不存在逆元

    所以直接乘上$prod m_i$除以$m_i$的做法不再可行,因为没有逆元可乘不能保证不影响结果在其他方程的余数

    只能~~去颓别人的结论~~继续考虑一个一个方程地构造,假设目前得到了满足前$k-1$个方程的结果


    网络上有写的很好的解同余方程组的解法,不(找)复(不)读(见)了,记一下自己的理解。

     

    而我要保证前k-1个方程的结果不动,现在唯一能做的就是给$a_{k-1}$加上一堆$lcm_{i=1}^{k-1}(m_i)$的倍数来调整其$mod m_k$的结果

    就像当初疯狂向$x$累加$frac{M}{m_i}$的倍数一样...

    具体是多少倍,这应该参考每加一个$m'=lcm_{i=1}^{k-1}(m_i)$会造成什么影响

    就是使结果增加$gcd(m',m_k)$吧。

    那么需要加的东西就是$frac{a_k-lastans}{gcd(m',m_k)}*m'$

    注意这里若$(a_k-lastans)%gcd(m',m_k)>0$,则无解。

     


    $$Lucas Theorem$$

    求$C_n^mmod p,pin prime$,$n,m$很大

    lucas发现了一个结论:

    $forall iin[1,n-1],C_n^i\%n==0$等价于$nin prime$

    $nin prime$时,左式显然成立

    $n$是合数时,将$n$的质因子$p$代入

    $C_n^p=frac{n}{p}frac{(n-1)!}{(n-p!(p-1)!}$

    这个东西显然已经没有$p$这一因子了,不能被n整除。

     

    这个有什么用?

    不是要求组合数吗,组合数就是二项式系数,那就拆个二项式。

    $egin{aligned}\(x+1)^p(mod p)&=sumlimits_{i=0}^n C_n^i x^i(mod p)\&=1+x^p(mod p)\end{aligned}$

    想让等式左边变成$(x+1)^n$,于是把n写成p进制

    $egin{aligned}\(x+1)^n&=prod ((x+1)^{p^k})^{c_k}\&=prod (1+x^{p^k})^{c_k}\end{aligned}$

    把m也写成p进制,那么得到了

    $C_n^m=prod C_{c_k}^{b_k}$

    即是。

     

    $$Ex Lucas Theorem$$

    $Lucas Theorem$没啥关系了。

    对于乱七八糟的合数$M$,拆成$prod p^k$,这样可以用crt合并。

    求$mod p^k$的值,我们要保证把p的倍数和其他数分开,因为一旦乘到了0就不可逆了

    所以要把分子分母的阶乘分开考虑,才能实现p的次数互消

    一个简单的想法是只考虑阶乘中p的次数以及其余乘积$mod p^k$的值

    $p$的次数容易求出,在$sum p^k$的复杂度可以接受的情况下,后者也容易求出

    因为$prodlimits_{i=1}^{p^k} [i%p!=0] i$和$prodlimits_{i=p^k+1}^{2p^k} [i%p!=0] i$在$mod p^k$是相等的

    所以这种整段的直接快速幂,零碎的预处理,

    至于$prod [i%p==0] i$这一部分,把p这一因子提出来发现也成为了阶乘的形式,递归即可。

  • 相关阅读:
    火狐flash插件
    centos 安装php ide (eclipse + php 插件)
    编译器的工作过程
    php中调用mysql的存储过程和存储函数
    mysql 高性能
    存储过程/游标/mysql 函数
    php 生成二维码
    frameset,frame应用,常用于后台
    html5 meta头部设置
    CAReplicatorLayer复制Layer和动画, 实现神奇的效果
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/12141788.html
Copyright © 2011-2022 走看看