Lucas定理(大组合数的取模)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

首先给出这个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])  mod p同余

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

这个定理的证明不是很简单,我一直想找个很好的证明,但是,没找到,昨天看到了一个解题报告,基本上可以说明白这个Lucas定理是怎么回事了,具体的是说:

以求解n! % p为例,把n分段,每p个一段,每一段求的结果是一样的。但是需要单独处理每一段的末尾p, 2p, ...,把p提取出来,会发现剩下的数正好又是(n / p)!,相当于划归成了一个子问题,这样递归求解即可。

这个是单独处理n!的情况,当然C(n,m)就是n!/(m!*(n-m)!),每一个阶乘都用上面的方法处理的话,就是Lucas定理了,注意这儿的p是素数是有必要的。

Lucas最大的数据处理能力是p在10^5左右,不能再大了,hdu 3037就是10^5级别的!


对于大组合数取模,n,m不大于10^5的话,用逆元的方法,可以解决。对于n,m大于10^5的话,那么要求p<10^5,这样就是Lucas定理了,将n,m转化到10^5以内解。

然后再大的数据,我就不会了!

推荐题:hdu 3037

hdu3037 组合数(Lucas定理) 题目相当于求n个数的和不超过m的方案数。 如果和恰好等于m,那么就等价于方程x1+x2+...+xn = m的解的个数,利用插板法可以得到方案数为: (m+1)*(m+2)...(m+n-1)  = C(m+n-1,n-1) = C(m+n-1,m) 现在就需要求不于m的,相当于对i = 0,1...,m对C(n+i-1,i)求和,根据公式C(n,k) = C(n-1,k)+C(n-1,k 阅读详情

相关推荐

Lucas定理应用分析——组合数

首先给出Lucas(卢卡斯)定理:     有非负整数A、B,和素数p,A、B写成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]) mod p同余。 即:Lucas(n,m,p)=C(n%p,m%p)×Lucas(n/p,m/p,p)

AC_Gibson的专栏 2084

组合数

考虑C(n,m)%P 情况一:n,m很,P为素数 处理小范围的阶乘和阶乘的逆元 用卢卡斯定理即可。卢卡斯定理: 情况二: 当P= p1∗p2∗p3∗...∗pn% MathType!MTEF!2!1!+- % feaagKart1ev2aaatCvAUfeBSjuyZL2yd9gzLbvyNv2CaerbuLwBLn % hiov2DGi1BTfMBaeXatLxBI9gBaerbd9w

INCINCIBLE的博客 1182

Lucas定理组合数的高效算法与实现详解

组合数算法竞赛和密码学中的常见问题,尤其在处理数据时,直接计算阶乘会导致溢出或效率低下。其核心原理在于利用运算的性质和数论定理,将复杂计算转化为可处理的小规问题。Lucas定理正是针对数为质数时,组合数的高效解决方案,它通过将n和m转换为p进制表示,将原问题分解为多个小组合数的乘积,从而显著降低计算复杂度。该技术在需要处理天文数字级别组合数运算的场景中极具价值,例如在**算法面试**和**组合数学**问题中,当n和m高达10^18而数p较小时,常规的阶乘逆元法会因包含因子p而

weixin_34032621的博客 355

数论系列】 组合数问题

组合数问题的六种求解场景。

这里是阿安的博客 2010

(扩展)Lucas定理——求组合数

Lucas定理 若PPP为质数 Crn≡C⌊r/P⌋⌊n/P⌋×Cr&amp;amp;nbsp;mod&amp;amp;nbsp;Pn&amp;amp;nbsp;mod&amp;amp;nbsp;P&amp;amp;nbsp;(mod&amp;amp;nbsp;P)Cnr≡C⌊n/P⌋⌊r/P⌋×Cn&amp;amp;nbsp;mod&amp;amp;nbsp;Pr&amp;amp;nbsp;mod&amp;amp;nbsp

CaptainChen的博客 416

Lucas定理——组合数

组合数,求C[n][m]%p 公式:C[n][m]%p == C[n%p][m%p]*C[n/p][m/p]%p 代码(内含粗略解释): #define LL long long LL mont(LL a,LL b,LL c){//快速幂 LL ans=1; a%=c; while(b){ if(b&amp;amp;amp;amp;amp;amp;1)ans=ans*a%c; ...

AnnieL 625

Lucas定理——推导及证明

Lucas定理组合数) 一、定义:     当n、m为数,p为素数时,Lucas定理是用来求 c(n,m) mod p的值。适用领域范围:在数论中求组合数。   表达式:C(n,m)%p=C(n/p,m/p)*C(n%p,m%p)%p 二、定理内容:    Lucas定理:我们令n=sp+q , m=tp+r .(q ,r ≤p) 那么

猴子姑娘呀的博客 4950

Lucas定理组合数的求法总结

Lucas定理组合数的求法总结

hggjgff的博客 382

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

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

weixin_34393428的博客 361

Lucas定理到ExLucas组合数算法原理与实现

组合数算法竞赛与数论编程中的核心问题,尤其在处理整数时,直接计算阶乘会导致溢出。其基本原理是将组合数计算转化为运算,利用数论工具实现高效求解。当数为素数时,Lucas定理通过p进制分解,将问题递归转化为小规组合数的乘积,复杂度降至对数级,体现了数论算法优化中的巨价值。这一技术广泛应用于需要精确计算组合数的场景,如密码学与计数问题。然而,当数为合数时,标准Lucas定理失效,需引入扩展卢卡斯定理(ExLucas)。ExLucas通过质因数分解与中国剩余定理(CRT),将问题拆解

weixin_33525298的博客 326

Lucas定理组合数

Lucas定理组合数 #include<iostream> #include<stdio.h> #define LL long long using namespace std; LL a,b; int p; LL quick_mod(LL a, LL b) { LL ans = 1; a %= p; while(b) { if(b & 1) { ans = ans * a % p; b--; } b >>= 1; a =

清风 308

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定理解决组合数

1 LL MyPow(LL a, LL b) 2 { 3 LL ret = 1; 4 while (b) 5 { 6 if (b & 1) 7 ret = ret * a % MOD; 8 a = a * a % MOD; 9 b >>= 1; ...

weixin_30268921的博客 80
上一篇: poj1006 生理周期(中国剩余定理)
下一篇: hdu3037 Saving Beans(Lucas定理+费马小定理or扩展欧几里德算发)
随心丶而遇
博客等级 码龄11年 42粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值