首页 > 其他分享 >卢卡斯定理

卢卡斯定理

时间:2024-07-27 14:08:22浏览次数:15  
标签:int res 定理 卢卡斯 mod define

1.卢卡斯定理用于求解大组合数取模的问题,其中模数必须为素数。
2.卢卡斯定理的具体表述:

\[C^{m}_{n}=C^{b0}_{a0}✖️C^{b1}_{a1}✖️ C^{b2}_{a2}..... C^{bk}_{ak}(mod\quad p)=\prod^{k}_{i=0}C^{bi}_{ai}(mod\quad p); \]

(mod p)表示只在模p的条件下成立
这个式子又等价于

\[C^{m}_{n}=C^{m \% p}_{n\% p}C^{m/p}_{n/p}(mod\quad p); \]

3.这里不证明,因为我不会证明。

模版应用

/**   - swj -
   *         
      />    フ
      |  _  _|
      /`ミ _x ノ
     /      |
    /   ヽ   ?
 / ̄|   | | |
 | ( ̄ヽ__ヽ_)_)
 \二つ
 
**/


#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
#define all(v) v.begin(),v.end()
#define ull unsigned long long
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};

//----卢卡斯定理--------------
//#define mod 1000000007
int n,m,mod;
int  qpow(int a,int n) //快速幂
{
    int res=1;
    while(n)
    {
        if(n&1) res=res*a%mod;
        a=a*a%mod;
        n>>=1;
    }
    return res;
}

int C(int n,int m)//组合数
{
    if(n<m) return 0;
    if(m>n-m) m=n-m;
    int a=1,b=1;
    for(int i=0;i<m;i++){
        a=(a*(n-i))%mod;
        b=(b*(i+1))%mod;
    }
    return a*qpow(b,mod-2)%mod;
}

int lucas(int n,int m)//卢卡斯定理
{
    if(m==0) return 1;
    return lucas(n/mod,m/mod)*C(n%mod,m%mod)%mod;
}

//--------------------------------------



signed main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    int t=1;cin>>t;
    while(t--) {
        cin>>n>>m>>mod;
        cout<<lucas(n+m,n)<<endl;
    }
    
}


练习题
P3807 【模板】卢卡斯定理/Lucas 定理
D - Bouquet

标签:int,res,定理,卢卡斯,mod,define
From: https://www.cnblogs.com/swjswjswj/p/18326864

相关文章

  • 裴蜀定理学习记录
    1477A-NezzarandBoard观察到2x-y可以拆成x+(x-y),现在模拟一下这个过程  发现得到的数可以看成从某个点xj出发,加上若干个两数之间的差的形式。再考虑一下2x-y的几何意义,发现相当于在数轴上做x关于y的对称点,并且和数的分布位置有关,和具体数值是无关的接下来有一个不太好......
  • 裴蜀定理
    裴蜀定理Definition设d=(a,b)则存在两个整数x,y,满足:\[ax+by=d\]Solution首先带入下数据(随便两个整数)例:1410不难看出,gcd(14,10)=2辗转相除法:(a,b)=(b,amodb)\(\cfrac{14}{10}=1...4\)\(\cfrac{10}4=2...2\)\(\cfrac42=2...0\)当(amodb)=0时,结束,取最后一次的商......
  • 基础数论 欧拉定理与exgcd
    欧拉定理:若正整数\(a,n\)互质,则\(a^{\varphi(p)}\equiv1(\bmodp)\)推论(扩展欧拉定理):\[a^b\equiv\begin{cases}a^{b\\bmod\\varphi(p)}\\\\\\\\\\gcd(a,p)=1\\a^b\\\\\\\\\\\\\\\\\\\\\\gcd(a,p)!......
  • 最长不降子序列 n log n 方案输出与 Dilworth 定理 - 动态规划模板
    朴素算法不必多说,\(O(n^2)\)的暴力dp转移。优化算法时间为\(O(n\logn)\),本质是贪心,不是dp。思路是维护一个单调栈(手写版),使这个栈单调不降。当该元素\(\ge\)栈顶元素时,把这个元素压入栈中。否则,在单调栈中找到第一个大于该元素的项,把这一项改为这个元素。(因为要......
  • 【数学】【模板】欧拉定理
    欧拉定理思想若\(a\)与\(n\)互质,则\(a^{\varphi(n)}\equiv1\pmodn\);容易得出当\(n\)为质数时,\(a^{n-1}\equiv1\pmodn\)。证明假设与\(1\simn\)中与\(n\)互质的数字为\(x_1,x_2,x_3,\cdotsx_{\varphi(n)}\),且两两不同。现将它们全部乘以\(a\)得......
  • 定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当
    /定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数。例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。/#include<stdio.......
  • 欧拉定理
    欧拉定理:对\(\foralla,b\)满足\((a,b)=1\),有\(a^{\varphi(b)}\equiv1\:(mod~b)\)证明:由简化剩余系的基本性质易得\(a_0a_1...a_{\varphi(m)-1}\equiv(aa_0)(aa_1)...(aa_{\varphi(m)-1})\(mod~m)\)推广:对\(\foralla,b,n\)有\(a^n\equiva^{n\:mod\:\varp......
  • 勾股定理学习笔记
    第一章勾股定理1.1勾股定理的证明对于勾股定理,有约\(500\)种证明方法。常见的有数格子(见课本勾股数)、赵爽弦图(两种)、加菲尔德证法(总统图)、毕达哥拉斯证法、华蘅芳证法、百牛定理证法、商高定理证法、商高证法、刘徽证法、绉元智证法等。这里只列出常见的几种方法。1.1.1......
  • 费马小定理-期望dp
    E-小红的树上移动(Nowcoder85687E)题目大意小红有一棵......
  • 积分中值定理的证明2
    积分中值定理的证明:因为\(f\)是闭区间上的连续函数,\(f\)取得最大值\(M\)和最小值\(\mu\)。于是\[Mg(x)\geqf(x)g(x)\geq\mug(x).\]对不等式求积分,我们有\[M\int_{\alpha}^{\beta}g(x)dx\geq\int_{\alpha}^{\beta}f(x)g(x)dx\geq\mu\int_{\alpha}^{\beta}g(x)......