lucas定理

(nm) mod p=(⌊np⌋⌊mp⌋)(n mod pm mod p) mod p=(n/pm/p)(n%pm%p) mod p\tbinom{n}{m} \bmod p = \tbinom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{m}{p} \rfloor} \tbinom{n \bmod p}{m \bmod p} \bmod p=\tbinom{n/p}{m/p}\tbinom{n\%p}{m\%p} \bmod p(mn​)modp=(⌊pm​⌋⌊pn​⌋​)(mmodpnmodp​)modp=(m/pn/p​)(m%pn%p​)modp

先预先求出i!  (i∈[0,p))i! \;(i \in \left[0,p\right))i!(i∈[0,p)).

并利用费马小定理和快速幂乘求出每一个i!i!i!的逆元(i!)−1(i!)^{-1}(i!)−1。求(nm) mod p\tbinom{n}{m} \bmod p(mn​)modp,当m=0m=0m=0直接就是111.若n,mn,mn,m都在ppp范围内,则直接转化为n!×(m!)−1×[(n−m)!]−1n! \times (m!)^{-1} \times [(n-m)!]^{-1}n!×(m!)−1×[(n−m)!]−1.否则就是lucas定理缩小规模。

[对一个固定的p,预处理求阶乘及快速模幂求其逆元,时间复杂度O(plog⁡2p)O(p\log_2{p})O(plog2​p)。空间复杂度O(p)O(p)O(p)。预处理之后,单次求(nm) mod p\tbinom{n}{m} \bmod p(mn​)modp复杂度O(log⁡pm)O(\log_{p}{m})O(logp​m)]{}

洛谷P3807模板题

void prepare(ll p, vector<ll>&fac, vector<ll>&inv_fac) {
fac.resize(p); inv_fac.resize(p);
mod_sys mod;
mod.set_mod(p);
fac[0] = 1;
inv_fac[0] = 1;
for (int i = 1; i < p; ++i) {
fac[i] = (fac[i-1]*i)%p;
inv_fac[i] = mod.pow(fac[i], p-2); // 既然能枚举一遍,p*p不应该爆ll
}
} // 输入预设0=<n,m<p
inline ll combination(ll n, ll m, ll p, vector<ll>&fac, vector<ll>&inv_fac) {
if (n < m) return 0;
return fac[n]*inv_fac[m]%p*inv_fac[n-m]%p;
} ll lucas(ll n, ll m, ll p, vector<ll>&fac, vector<ll>&inv_fac) {
if (n < m) return 0;
ll ans = 1;
while(true) {
if (m == 0) return ans;
if (n < p && m < p) return ans*combination(n,m,p,fac,inv_fac)%p;
ans = ans * combination(n%p,m%p,p,fac,inv_fac)%p;
n/=p; m/=p;
}
}

lucas定理 模板的更多相关文章

  1. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  2. 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数

    typedef long long ll; /********************************** 大组合数取模之lucas定理模板,1<=n<=m<=1e9,1&l ...

  3. Lucas定理模板【bzoj2982】【combination】

    (上不了p站我要死了,侵权度娘背锅) Description LMZ有n个不同的基友,他每天晚上要选m个进行[河蟹],而且要求每天晚上的选择都不一样.那么LMZ能够持续多少个这样的夜晚呢?当然,LMZ ...

  4. 【组合数+Lucas定理模板】HDU 3037 Saving

    acm.hdu.edu.cn/showproblem.php?pid=3037 [题意] m个松果,n棵树 求把最多m个松果分配到最多n棵树的方案数 方案数有可能很大,模素数p 1 <= n, ...

  5. BZOJ 4403 2982 Lucas定理模板

    思路: Lucas定理的模板题.. 4403 //By SiriusRen #include <cstdio> using namespace std; ; #define int lon ...

  6. Lucas定理模板

    用于大组合数对p取模的计算. #include <cstdio> #include <iostream> #include <cmath> #include < ...

  7. HDU 3037 Saving Beans(Lucas定理模板题)

    Problem Description Although winter is far away, squirrels have to work day and night to save beans. ...

  8. xdoj-1057(Lucas定理的证明及其模板)

    Lucas定理的证明: 转自百度百科(感觉写的还不错) 首先你需要这个算式:    ,其中f > 0&& f < p,然后 (1 + x) nΞ(1 + x) sp+q Ξ ...

  9. 组合数取模&&Lucas定理题集

    题集链接: https://cn.vjudge.net/contest/231988 解题之前请先了解组合数取模和Lucas定理 A : FZU-2020  输出组合数C(n, m) mod p (1 ...

随机推荐

  1. springIOC源码接口分析(六):ResourceLoader

    参考博客: https://www.cnblogs.com/jixp/articles/10702486.html 一 定义方法 Spring提供了ResourceLoader接口用于实现不同的Res ...

  2. idea maven 动态打包指定环境

    jar pom.xml <!-- 指定文件id --> <profiles> <profile> <id>alpha</id> <pr ...

  3. 2020 University Rankings US News(亚洲)

    2020 University Rankings US News(亚洲)

  4. postgresql spi开发笔记

    #include "postgres.h" #include "fmgr.h" #include <string.h> #ifdef PG_MODU ...

  5. PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)

    ​本文转自:自己的微信公众号<集成电路设计及EDA教程> <PT教程 - 应用系列 - ECO修复Timing(理论+实践+脚本分享)> 这篇推文讲一下数字IC设计中的post ...

  6. Serverless 的资源评估与成本探索

    Serverless 布道师在讲解 Serverless 架构和云主机等区别的时候,总会有类似的描述: 传统业务开发完成想要上线,需要评估资源使用.根据评估结果,购买云主机,并且需要根据业务的发展不断 ...

  7. sc,sockname = sock.accept()

    tcpSerSock.accept()返回两个结果,第一个放入tcpClisock,第二个放入addr. 这是python特有的语法.可以接收多个返回值.

  8. hdu 1159求最长公共子序列

    题目描述:给出两个字符串,求两个字符串的公共子序列(不是公共子串,不要求连续,但要符合在原字符串中的顺序) in: abcfbc abfcab programming contest abcd mnp ...

  9. bzoj 50题纪念

    bzoj好难,边看题解边做终于水到了50t,不知道水平提没提高啊TAT

  10. Codeforces 924 A Tritonic Iridescence(暴力集合交集、相等)

    题目链接:点击打开链接 There is a rectangular grid of n rows of m initially-white cells each. Arkady performed ...