zoukankan      html  css  js  c++  java
  • 卢卡斯定理&扩展卢卡斯定理

    卢卡斯定理

      求(C_m^n~mod~p)

      设(m={a_0}^{p_0}+{a_1}^{p_1}+cdots+{a_k}^{p_k},n={b_0}^{p_0}+{b_1}^{p_1}+cdots+{b_k}^{p_k})

      则(C_m^nequivprod{C_{a_i}^{b_i}}(mod~p))

    扩展卢卡斯定理

      好像这也不是什么定理,只是一个计算方法

      计算(C_m^n~mod~p),其中(p={p_1}^{q_1} imes{p_2}^{q_2} imescdots{p_k}^{q_k})时,我们可以先求出(C_m^n~mod~{p_i}^{q_i}),然后用CRT合并。

      那么怎么计算(C_m^n~mod~{p_i}^{q_i})呢?

      (C_m^n=frac{m!}{n!(m-n)!}),我们只需要算出(m!,{n!}^{-1},{(m-n)!}^{-1}),然后乘在一起。

      zjt大爷:(n!)可能在模({p_i}^{q_i})的意义下没有逆元啊,那这就是错的了啊

      其实这里求得不是逆元(可能没有逆元),求出来的是(a imes {p_i}^b(gcd(a,p)=1)),前面的(a)用逆元,后面的次数加加减减一下就好了

      问题转换成求(n!~mod~p^q)

      例如(n=19,p=3,q=2)

    [egin{align} &19!\ =&1 imes2 imes3 imescdots imes19\ =&(1 imes2 imes4 imes5 imes7 imes8cdots imes16 imes17 imes19) imes(3 imes6 imes9 imes12 imes15 imes18)\ =&(1 imes2 imes4 imes5 imes7 imes8cdots imes16 imes17) imes19 imes3^6 imes(1 imes2 imes3 imes4 imes5 imes6)\ =&{(1 imes2 imes4 imes5 imes7 imes8)}^2 imes19 imes3^6 imes(1 imes2 imes3 imes4 imes5 imes6) end{align} ]

      上面这个式子分为四部分:

      第一部分:({(1 imes2 imes4 imes5 imes7 imes8)}^2)。这部分的数不超过(p^q)个,可以暴力算

      第二部分:(19)。这部分的数不超过(p^q)个,可以暴力算

      第三部分:(3^6)。这个在最后处理时求出(m!,n!,(m-n)!)分别有多少个(p)(设为(x,y,z)),则答案要乘上(p^{x-y-z})

      第四部分:(1 imes2 imes3 imes4 imes5 imes6)。这个是(lfloorfrac{n}{p} floor!),可以递归处理

  • 相关阅读:
    android 调试Installation failed with message INSTALL_FAILED_USER_RESTRICTED: Install canceled by user.
    selenium 调用方法
    正则去除空行
    tmux用法
    win10专业版激活
    11.17
    git reset,git checkout区别
    git reset revert区别
    python多线程,守护线程
    win7 32位安装 mong0db
  • 原文地址:https://www.cnblogs.com/ywwyww/p/8510973.html
Copyright © 2011-2022 走看看