卢卡斯定理 (Lucas's theorem)

Lucas定理

目录

定义

 点我了解卢卡斯定理 (Lucas's theorem)
p 为质数,且 1ba 则有:

CabCa/pb/p×Camodpbmodp(modp)


也就是,

Lucas定理是用来求 Cabmodp (p 为素数的值)




变形
首先,将 a , b 转化为 p 进制,即:

{a=akpk+ak1pk1++a1p1+a0p0b=bkpk+bk1pk1++b1p1+b0p0

那么CabCa/pb/p×Camodabmodp(modp) 还可以变形为:

CabCakbkCak1bk1Ca1b1Ca0b0(modp)

Cabi=0kCaibi(modp)



证明


算式(未知元)声明

证明过程围绕以下式子:

CabCa/pb/p×Camodpbmodp(modp)

{a=akpk+ak1pk1++a1p1+a0p0b=bkpk+bk1pk1++b1p1+b0p0

CabCakbkCak1bk1Ca1b1Ca0b0(modp)


1. 一些需要的定理

二项式定理

 首先,我们需要引入二项式定理
  点我了解二项式定理
 二项式定理就是

(a+b)n=Cn0an+Cn1an1b++Cnkankbk++Cnnbn(nN)

 即

(a+b)n=k=0nCnkankbk

 由此,还可以得到:

(1+x)n=Cn0+Cn1x++Cnkxk++Cnnxn


大家可以看看下面这张图片(图片)
image
以上就是二项式定理的基本内容

排列组合数

  点我了解排列组合数
关于排列组合在这里就不在赘述,简单地说就是
  排列数
   从 a 中选 b 个,是要讲顺序的,用 Aab 表示(以前用 Pab 表示),具体公式如下:

Aab=a(a1)(a2)(ab+1)=a!(ab)!

  组合数
   从 a 中选 b 个,是不讲顺序的,用 Cab 表示,具体公式如下:

Cab=AabAbb=a(a1)(a2)(ab+1)b(b1)(b2)321=a!(ab)!b!

  通过观察,我们还可以得到:

Cabn=Cab+n

好了,组合数就到这吧,到兴趣的话可以在我的博客找找相关内容(博客链接)

乘法逆元

  点我了解乘法逆元
就简单地说两句吧
  关于下面的式子

Δa=Δx(modp)

   x 叫做 ap 的乘法逆元
  也就是在 gcd(a,p)=1ap 互质)的情况下

x=a1

   x 就是 p 的乘法逆元


幂的乘法、乘方以及积的乘法

  关于这个,相信大家都知道吧 我还是在这里提一提吧

aman=am+n

(am)n=amn

(ab)n=anbn



如果上面的内容看得云里雾里的话,可以在我的博客里找找相关内容(博客链接)

2. (1+x)p1+xp(modp)

然后,我们就要通过刚才的二项式定理证明一下 (1+x)p1+xp(modp)
过程如下:
 由二项式得:

(1+x)pCp0x0+Cp1x1++Cpkxk++Cpp1xp1+Cppxp(modp)1x0+px1++p!(pk)!k!xk++pxk1+1xk(modp)1+px++p![(pk)!k!]1xk++pxk1+xk(modp)

 通过观察,我们可以发现:px++p![(pk)!k!]1xk++pxk1 其实是 p 的倍数, (modp) 就刚好除尽。
 所以这一长串式子就可以化简为:

(1+x)p(1modp)+(px++p![(pk)!k!]1xk++pxk1)modp+(xkmodp)(modp)1+0+xk(modp)

所以 (1+x)p1+xp(modp)
以上就是本部分的过程。



3.核心过程  CabCakbkCak1bk1Ca1b1Ca0b0(modp)

  首先,咱们先将 abp 进制 进行转换,如下:

a=akpk+ak1pk1++a1p1+a0p0

b=bkpk+bk1pk1++b1p1+b0p0

所以(通过 aman=am+n 逆用 以及 二项式定理 得到)

(1+x)a=(1+x)akpk+ak1pk1++a1p1+a0p0(modp)=(1+x)akpk(1+x)ak1pk1(1+x)a1p1(1+x)a0p0(modp)(1+xak)pk(1+xak1)pk1(1+xa1)p1(1+xa0)p0(modp)i=0k(1+xai)pi(modp)

进一步转化可以得到:

CabxbCakbk(xpk)bkCak1bk1(xpk1)bk1Ca1b1(xp1)b1Ca0b0(xp0)b0(modp)i=0kCaibi(xpi)bi(modp)

再通过 (am)n=amn ,得:

CabxbCakbkxbkpkCak1bk1xbk1pk1Ca1b1xb1p1Ca0b0xb0p0(modp)i=0kCaibixbipi(modp)

再将因数分解一下:

CabxbCakbkCak1bk1Ca1b1Ca0b0xbkpkxbk1pk1xb1p1xb0p0(modp)i=0kCaibii=0kxb0p0(modp)

此时,我们发现括号左边的 xb 与括号右边的 xbkpkxbk1pk1xb1p1xb0p0 是相等的,
所以

CabCakbkCak1bk1Ca1b1Ca0b0(modp).

然后,我们将会发现这个公式就是下面公式的不断迭代

CabCa/pb/p×Camodpbmodp(modp)

得证











如果还不清楚的话,可以看看一下几个链接:
%%%1
%%%2
%%%3
特别推荐



如有不当之处,欢迎指出


Bye~


~~~

posted @   Mingrui_Yang  阅读(147)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示