首页 > 其他分享 >学习笔记:卢卡斯定理

学习笔记:卢卡斯定理

时间:2023-11-01 23:56:06浏览次数:40  
标签:lfloor rfloor 定理 笔记 long 卢卡斯 binom bmod equiv

卢卡斯定理

引入

卢卡斯定理用于求解大组合数取模的问题,其中模数必须为素数。正常的组合数运算可以通过递推公式求解,但当问题规模很大,而模数是一个不大的质数的时候,就不能简单地通过递推求解来得到答案,需要用到卢卡斯定理。

定义

卢卡斯定理内容如下:对于质数 \(p\),有

\[\binom{n}{m}\bmod p = \binom{\left\lfloor n/p \right\rfloor}{\left\lfloor m/p\right\rfloor}\cdot\binom{n\bmod p}{m\bmod p}\bmod p \]

观察上述表达式,可知 \(n\bmod p\) 和 \(m\bmod p\) 一定是小于 \(p\) 的数,可以直接求解,\(\displaystyle\binom{\left\lfloor n/p \right\rfloor}{\left\lfloor m/p\right\rfloor}\) 可以继续用卢卡斯定理求解。这也就要求 \(p\) 的范围不能够太大,一般在 \(10^5\) 左右。边界条件:当 \(m=0\) 的时候,返回 \(1\)。

时间复杂度为 \(O(f(p) + g(n)\log n)\),其中 \(f(n)\) 为预处理组合数的复杂度,\(g(n)\) 为单次求组合数的复杂度。

long long c(long long n, long long m, long long p){
      if(m == 0) return 1;
      else return (c(n % p, m % p, p) * c(n / p, m / p, p)) % p;
}

证明

考虑 \(\displaystyle\binom{p}{n} \bmod p\) 的取值,注意到 \(\displaystyle\binom{p}{n} = \frac{p!}{n!(p-n)!}\),分子的质因子分解中 \(p\) 的次数恰好为 \(1\),因此只有当 \(n = 0\) 或 \(n = p\) 的时候 \(n!(p-n)!\) 的质因子分解中含有 \(p\),因此 \(\displaystyle\binom{p}{n} \bmod p = [n = 0 \vee n = p]\)。进而我们可以得出

\[\begin{align} (a+b)^p &= \sum_{n=0}^p \binom pn a^n b^{p-n}\\ &\equiv \sum_{n=0}^p [n=0\vee n=p] a^n b^{p-n}\\ &\equiv a^p + b^p \pmod p \end{align} \]

注意过程中没有用到费马小定理,因此这一推导不仅适用于整数,亦适用于多项式。因此我们可以考虑二项式 \(f^p(x)=(ax^n + bx^m)^p \bmod p\) 的结果

\[\begin{align} (ax^n + bx^m)^p &\equiv a^p x^{pn} + b^p x^{pm} \\ &\equiv ax^{pn} + bx^{pm}\\ &\equiv f(x^p) \end{align} \]

考虑二项式 \((1+x)^n \bmod p\),那么 \(\displaystyle\binom n m\) 就是求其在 \(x^m\) 次项的取值。使用上述引理,我们可以得到

\[\begin{align} (1+x)^n &\equiv (1+x)^{p\lfloor n/p \rfloor} (1+x)^{n\bmod p}\\ &\equiv (1+x^p)^{\lfloor n/p \rfloor} (1+x)^{n\bmod p} \end{align} \]

注意前者只有在 \(p\) 的倍数位置才有取值,而后者最高次项为 \(n\bmod p \le p-1\),因此这两部分的卷积在任何一个位置只有最多一种方式贡献取值,即在前者部分取 \(p\) 的倍数次项,后者部分取剩余项,即 \(\displaystyle\binom{n}{m}\bmod p = \binom{\left\lfloor n/p \right\rfloor}{\left\lfloor m/p\right\rfloor}\cdot\binom{n\bmod p}{m\bmod p}\bmod p\)。

标签:lfloor,rfloor,定理,笔记,long,卢卡斯,binom,bmod,equiv
From: https://www.cnblogs.com/tsqtsqtsq/p/17804443.html

相关文章

  • 学习笔记:裴蜀定理
    裴蜀定理定义裴蜀定理,又称贝祖定理(Bézout'slemma)。是一个关于最大公约数的定理。其内容是:设\(a,b\)是不全为零的整数,则存在整数\(x,y\),使得\(ax+by=\gcd(a,b)\).证明若任何一个等于\(0\),则\(\gcd(a,b)=a\).这时定理显然成立。若\(a,b\)不等于\(0\).由......
  • 学习笔记:威尔逊定理
    威尔逊定理定义威尔逊定理:对于素数\(p\)有\((p-1)!\equiv-1\pmodp\)。证明我们知道在模奇素数\(p\)意义下,\(1,2,\dots,p-1\)都存在逆元且唯一,那么只需要将一个数与其逆元配对发现其乘积均为(同余意义下)\(1\),但前提是这个数的逆元不等于自身。那么很显然\((p-1)!\bmod......
  • uboot的重定向汇编详细分析--Apple的学习笔记
    一,前言既然是第二轮学习,当然要比第一轮增加深度,获取更多技能和通用方法论。之前我想通过代码关闭relocate功能,结果一尝试就复位了,看来没我想的简单,还是先了解下relocate的代码。二,源码分析调用前r0有传参为gd->relocaddr,也就是一个指针地址保存在r0。arch/arm/lib/crt0.S ldr r0,......
  • Shapley Value 学习笔记
    Shapleyvalue用于计算个体对整体的贡献度,它的计算公式如下:\[\varphi_i(v)=\sum_{S\subseteqN\backslash\{i\}}\frac{|S|!(N-|S|-1)!}{n!}(v(S\cup\{i\})-v(S))\]其中,\(v\)表示是价值函数,返回一个组合的价值。\(S\)表示一种可能的组合(不包含\(i\),所以它可能是空集......
  • Java笔记—Java修饰符
    Java语言提供了很多修饰符,主要分为以下两类:访问修饰符非访问修饰符1、访问控制修饰符Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。default (即默认,什么也不写):在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方......
  • Java笔记—Java修饰符
    Java语言提供了很多修饰符,主要分为以下两类:访问修饰符非访问修饰符1、访问控制修饰符Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。default (即默认,什么也不写):在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方......
  • 【算法笔记】动态规划Dynamic Programming
    参考视频:5SimpleStepsforSolvingDynamicProgrammingProblems引子:最长递增子串(LongestIncreasingSubsequence,LIS)LIS([31825])=len([125])=3LIS([52863695])=len([2369])=4解决问题的三个步骤:可视化例子(visualizeexample)(“visualizee......
  • 《信息安全系统设计与实现》第九周学习笔记
    一、第五章定时器及时钟服务1、并行计算是一种计算方案,它尝试使用多个执行并行算法的处理器更快速的解决问题顺序算法与并行算法并行性与并发性并行算法只识别可并行执行的任务。CPU系统中,并发性是通过多任务处理来实现的2、线程线程的原理:某进程同一地址空间上的独立......
  • 【python爬虫】80页md笔记,0基础到scrapy项目高手,第(3)篇,requests网络请求模块详解
    本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。完整版笔记直接地址:请移步这里共8章,37子模块,总计56668字requests模块本阶段本文主要学习requests这......
  • 【matlab笔记】杂乱版
    求Lagrange插值多项式symsx;X=[1,3/2,0,2]Y=[3,13/4,3,5/3]n=length(X);L=sym('1');P=sym('0');fori=1:n%求出Li(x)Li=sym('1');forj=1:nifj~=iLi=Li*(x-X(j))/(X(i)-X(j......