模板—卢卡斯定理+乘法逆元

本文介绍了一种使用快速幂算法进行大整数运算的方法,并应用到组合数的求解中,通过Lucas定理进一步优化组合数的计算过程,适用于解决复杂数学问题和编程竞赛中的挑战。
 1 LL inv(LL a,LL b)
 2 {
 3     LL ans=1,res=a;
 4     while(b)
 5     {
 6         if(b&1)ans=ans*res%p;
 7         res=res*res%p;
 8         b=b>>1;
 9     }
10     return ans%p;
11 }
12 LL C(LL n,LL m)
13 {
14     if(n<m)return 0;
15     return jc[n] * inv(jc[m],p-2)%p * inv(jc[n-m],p-2)%p;
16 }
17 LL Lucas(LL n,LL m)
18 {
19     if(!m)return 1;
20     return C(n%p,m%p)*Lucas(n/p,m/p)%p;
21 }

inv(a,p)=pow(a,p-2)%p;GCD(a,p)=1;

 

转载于:https://www.cnblogs.com/Al-Ca/p/11101561.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值