组合数对素数取模 Lucas定理

为什么尽量对质数 先说结论:因为对质数之后的结果发生碰撞概率更小。 阅读详情

Lucas 定理:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。

则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0])  modp同

即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 


 对于单独的C(ni, mi) mod p,已知C(n, m) mod p = n!/(m!(n - m)!) mod p。显然除法取模,这里要用到m!(n-m)!的逆元。

根据费马小定理

已知(a, p) = 1,则 ap-1 ≡ 1 (mod p),  所以 a*ap-2 ≡ 1 (mod p)。

也就是 (m!(n-m)!)的逆元为 (m!(n-m)!)p-2 ;


运算为什么推荐用素数 为什么一般hashtable的桶数会一个素数?本文从实际情况出发,举例详细阐述原因 阅读详情

相关推荐

对于用质数

做了一道水题,引起了我对某的兴趣; 对于一元多次方程f(x) 我们要判断f(x)是否为0; 但是难; 然后发现f(x)=0的时候f(x)%y=0 (y是任意数) 所以万我们就来可以5,6个y; 如果f(x)%y全部是0的,那么f(x)多半是0; - 问题来了,为什么y要选质数,这个只是个域啊 如果f(x)其实不是0,那么f(0)一定是这几个质数的

我怎么这么菜的呢 1719

Lucas定理(求组合数) 扩展Lucas定理(解决数非质情况)

在比赛时 , 如果遇到CmnCnmC_n^m的n比较大 , 我们不能通过预处理阶乘和逆元来计算 , 而题目又要求对答案一个质数的时候 , 我们可以用Lucas定理来简化计算 Lucas 定理: 定义 : n,m是非负整数,p是素数时 , Lucas(n,m)=Cmn%pLucas(n,m)=Cnm%pLucas(n,m)=C_n^m\;\% p 公式 : Lucas(n...

QAQ 2592

fzu 2020 组合数素数

题意:输出C(n,m)%p的值,其中(1 解题思路:C(n,m) = [n*(n-1)*(n-2)*...*(n-m+1)]/[1*2*3*...*m].                   令    a =   [n*(n-1)*(n-2)*...*(n-m+1)

836

组合数方法总结(Lucas定理介绍)

原文地址 1.当n,m都很小的时候可以利用杨辉三角直接求。 C(n,m)=C(n-1,m)+C(n-1,m-1); 2、n和m较大,但是p为素数的时候 Lucas定理是用来求 c(n,m) mod p,p为素数的值。 C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 也就是Lucas(n,m)%p=Lucas(n/p,m/p)*C(n%p,m%p)%p ...

苏格拉没有底 361

Lucas定理实战:大组合数的算法实现与优化

组合数是算法竞赛与面试中的核心问题,尤其在处理大整数时,直接计算阶乘会导致溢出。其原理基于运算与数论,通过费马小定理求逆元,可在素数下高效计算小范围组合数Lucas定理的技术价值在于将大组合数问题分解进制下的子问题,实现复杂度从O(n)降至O(log_p n)。应用场景包括密码学、概率统计及需要快速计算大组合数的算法题目。本文聚焦Lucas定理的代码实现、边界处理与性能优化,针对数p为素数的典型场景,详细解析了递归与迭代两种实现,并探讨了预处理阶乘逆元、数据类型防溢出等工程实践细节,帮

weixin_34393428的博客 361

组合数lucas定理板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数 复制代码

typedef long long ll; /**********************************  大组合数lucas定理板,1  输入:C(n,m)%p 调用lucas(n,m,p)  复杂度:min(m,p)*log(m)  ***********************************/ //ax + by = gcd(a,b

nucshiyilang的博客 971

卢卡斯定理

Lucas 定理内容如下:对于质数 ,有观察上述表达式,可知 和 一定是小于 的数,可以直接求解, 可以继续用 Lucas 定理求解。这也就要求 的范围不能够太大,一般在 左右。边界条件:当 的时候,返回。时间复杂度为 ,其中 为预处理组合数的复杂度, 为单次求组合数的复杂度。实现C++Python1234。

w_w_wwwww的博客 1022

组合数lucas定理板,1<=n<=m<=1e9,1<p<=1e6,p必须为素数

typedef long long ll; /********************************** 大组合数lucas定理板,1&lt;=n&lt;=m&lt;=1e9,1&lt;p&lt;=1e6,p必须为素数 输入:C(n,m)%p 调用lucas(n,m,p) 复杂度:min(m,p)*log(m) *********************...

weixin_34150224的博客 121

组合数

Lucas定理: m,n是非负整数,p是质数。m,n分别写成p进制: 则组合数C(n,m)与C(n[k],m[k])*C(n[k-1],m[k-1])*...*C(n[0],m[0]) mod p同余  除了这个Lucas定理以外,还要用到快速幂和另外一个不知名定理: 若p为质数,则(a/b)(mod p) = a * b^(p-2) (mod p)。如果p不为质数就不能这样求。 a

ACdreamer 3万+

Lucas定理与大组合数的求法总结

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Lucas定理与大组合数的求法总结分类:&nbsp;ACMer&nbsp;数学2012-03-11&nbsp;09:38&nbsp;1219人阅读&am

mmqqyyqqyyq的博客 401

Lucas定理:大组合数的高效算法与实战解析

组合数学是计算机科学中处理计数与排列问题的核心工具,尤其在算法设计与密码学领域应用广泛。组合数C(n,m)的计算在n和m较小时可通过阶乘公式直接求解,但当n和m达到10^18级别时,直接计算会面临数值溢出与时间复杂度过高的挑战。此时,运算成为关键,通过可以将结果限制在可控范围内,但传统预处理阶乘逆元的方法要求n小于数p。Lucas定理基于数论中的同余原理,通过将n和m转换为p进制表示,将大规组合数问题分解为多个小规子问题,从而将计算复杂度从O(n)降至O(log_p n)。这一技术价值在于高

weixin_29044157的博客 296

组合数介绍----Lucas定理介绍

转载https://www.cnblogs.com/fzl194/p/9095177.html 组合数方法总结(Lucas定理介绍) 1.当n,m都很小的时候可以利用杨辉三角直接求。C(n,m)=C(n-1,m)+C(n-1,m-1); const int maxn = 1e5 + 10; ll fac[maxn];//阶乘打表 void init(ll p)//此处的...

weixin_30576827的博客 126

【数论】Lucas定理推导过程+

Lucas定理主要用于组合数。Cmn≡Cm/pn/p⋅Cm%pn%p(modp) C_n^m \equiv C_{n / p} ^ {m / p} \cdot C_{n \% p}^{m \% p} \pmod p p为素数,m和n为非负整数p为素数,m和n为非负整数(ab)即Cba\binom{a}{b}\quad 即 \quad C^b_a证明过程:已知p为素数,将非负整数a转化为p进制

m674019130的博客 1091

数论与数学算法:欧几里得算法、素数筛法、快速幂、组合数

算法核心思想时间复杂度应用场景欧几里得算法辗转相除最大公约数、水壶问题扩展欧几里得回溯系数解不定方程、求逆元埃氏筛标记倍数求素数、质因数分解欧拉筛最小质因子筛O(n)大范围素数、最小质因子快速幂二进制分解O(log n)幂、加密算法Lucas定理递归分解O(log n)大组合数

2302_81155164的博客 1306
上一篇: hdu3037Saving Beans
下一篇: ZOJ 3769 Diablo III
Last0rder
博客等级 码龄18年 50粉丝 325原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值