扩展Lucas定理

2023-11-16

本介绍主要是在学习后写下自己的理解,故以转载形式发出。

题意: 给定 n , m , p n,m,p n,m,p,求 C n m m o d    p C_n^m\mod p Cnmmodp,其中 1 ≤ m ≤ n ≤ 1 0 18 , 2 ≤ p ≤ 1 0 6 1\leq m\leq n\leq 10^{18},2\leq p\leq 10^6 1mn1018,2p106
题解:

  • 目标:求 C n m m o d    p C_n^m\mod p Cnmmodp
  • p p p分解质因数: p = p 1 α 1 p 2 α 2 p 3 α 3 … p=p_1^{\alpha_1}p_2^{\alpha_2}p_3^{\alpha_3}\dots p=p1α1p2α2p3α3
  • 联想到中国剩余定理 p k α k p_k^{\alpha_k} pkαk是互质的模数,设 x = C n m m o d    p x=C_n^m\mod p x=Cnmmodp,所以有:
    { C n m ( m o d p 1 α 1 ) C n m ( m o d p 2 α 2 ) . . . \left\{\begin{array}{l} C_n^m \pmod {p_{1}^{\alpha_1}}\\ C_n^m \pmod {p_{2}^{\alpha_2}}\\ ...\\ \end{array}\right. Cnm(modp1α1)Cnm(modp2α2)...

答案 x x x就是合并所有同余式得到的答案。

  • 问题转换为了:

    C n m m o d    P k , [ p ∈ p r i m e s ] C_n^{m} \mod P^k,[p\in primes] CnmmodPk,[pprimes]

    即:

    n ! m ! ( n − m ) ! m o d    P k \frac{n!}{m!(n-m)!}\mod P^k m!(nm)!n!modPk

    那么问题就是无法确定 n ! n! n!中的 P P P是否对取模 P k P^k Pk有影响,以及如何求出 m ! , ( n − m ) ! m!,(n-m)! m!,(nm)!的逆元。由于 a a a p p p存在逆元的条件是 g c d ( a , p ) = 1 gcd(a,p)=1 gcd(a,p)=1
    所以先将 P P P从中提出:

    n ! P x m ! P y ( n − m ) ! P z P x − y − z m o d    P k \frac{\frac{n!}{P^x}}{\frac{m!}{P^y}\frac{(n-m)!}{P^z}}P^{x-y-z}\mod P^k Pym!Pz(nm)!Pxn!PxyzmodPk

  • 显然求出 n ! P x \frac{n!}{P^x} Pxn!即可。

  • n ! n! n!变形:

    n ! = 1 ⋅ 2 ⋅ 3 ⋅ . . . ⋅ n = ( P ⋅ 2 P ⋅ 3 P . . . ) ( 1 ⋅ 2... ) n!=1\cdot2\cdot 3 \cdot ...\cdot n=(P\cdot 2P\cdot 3P...)(1\cdot2...) n!=123...n=(P2P3P...)(12...)

          = P ⌊ n P ⌋ ( 1 ⋅ 2 ⋅ . . . ⋅ ⌊ n P ⌋ ) ( 1 ⋅ 2... ) \ \ \ \ \ = P^{\lfloor \frac{n}{P} \rfloor}(1\cdot2\cdot...\cdot\lfloor \frac{n}{P} \rfloor)(1\cdot2...)      =PPn(12...Pn)(12...)

          = P ⌊ n P ⌋ ( ⌊ n P ⌋ ) ! ∏ n i = 1 , ( i   m o d   P ≠ 0 ) i \ \ \ \ \ = P^{\lfloor \frac{n}{P} \rfloor}(\lfloor \frac{n}{P} \rfloor)! \underset{i=1,(i \ mod\ P \neq0)}{\overset{n}{\prod}}i      =PPn(Pn)!i=1,(i mod P=0)ni

    显然,后面这个连乘式是具有循环节的,且最后会有一段不完整的部分,这个部分长度也可能为 0 0 0
    即:

    P ⌊ n P ⌋ ( ⌊ n P ⌋ ) ! ( ∏ P k i = 1 , ( i   m o d   P ≠ 0 ) i ) ⌊ n P k ⌋ ( ∏ n i = P k ⌊ n P k ⌋ , ( i   m o d   P ≠ 0 ) i ) P^{\lfloor \frac{n}{P} \rfloor}(\lfloor \frac{n}{P} \rfloor)! (\underset{i=1,(i \ mod\ P \neq0)}{\overset{P^k}{\prod}}i)^{\lfloor \frac{n}{P^k} \rfloor}( \underset{i=P^k\lfloor \frac{n}{P^k} \rfloor,(i \ mod\ P \neq0)}{\overset{n}{\prod}}i) PPn(Pn)!(i=1,(i mod P=0)Pki)Pkn(i=PkPkn,(i mod P=0)ni)

    这里取 P k P^k Pk是因为 P k P^k Pk是这里的模数。

    我们要求的是 n ! P x \frac{n!}{P^x} Pxn!,注意这里的 ( ⌊ n P ⌋ ) ! (\lfloor \frac{n}{P} \rfloor)! (Pn)!也可能有 P P P,故定义函数:

    f ( n ) = n ! P x f(n)=\frac{n!}{P^x} f(n)=Pxn!

    故有:

    f ( n ) = f ( ⌊ n P ) ⌋ ( ∏ P k i = 1 , ( i   m o d   P ≠ 0 ) i ) ⌊ n P k ⌋ ( ∏ n i = P k ⌊ n P k ⌋ , ( i   m o d   P ≠ 0 ) i ) f(n)=f(\lfloor \frac{n}{P})\rfloor (\underset{i=1,(i \ mod\ P \neq0)}{\overset{P^k}{\prod}}i)^{\lfloor \frac{n}{P^k} \rfloor}( \underset{i=P^k\lfloor \frac{n}{P^k} \rfloor,(i \ mod\ P \neq0)}{\overset{n}{\prod}}i) f(n)=f(Pn)(i=1,(i mod P=0)Pki)Pkn(i=PkPkn,(i mod P=0)ni)

    这样求解 f ( n ) f(n) f(n)的时间复杂度为 O ( log ⁡ P n ) O(\log_{P} n) O(logPn)
    考虑下边界即 f ( 0 ) = 0 ! P 0 = 1 f(0)=\frac{0!}{P^0}=1 f(0)=P00!=1
    此时我们要求的式子为:

    n ! P x m ! P y ( n − m ) ! P z P x − y − z m o d    P k \frac{\frac{n!}{P^x}}{\frac{m!}{P^y}\frac{(n-m)!}{P^z}}P^{x-y-z}\mod P^k Pym!Pz(nm)!Pxn!PxyzmodPk

    = f ( n ) f ( m ) f ( n − m ) P x − y − z m o d    P k =\frac{f(n)}{f(m)f(n-m)}P^{x-y-z}\mod P^k =f(m)f(nm)f(n)PxyzmodPk

    此时 f ( m ) , f ( n − m ) f(m),f(n-m) f(m),f(nm)都与 P k P^k Pk互质,所以用 e x g c d exgcd exgcd求逆元即可。
    那么此时问题还剩 P x − y − z P^{x-y-z} Pxyz的求解。
    对于该式:

    P ⌊ n P ⌋ ( ⌊ n P ⌋ ) ! ( ∏ P k i = 1 , ( i   m o d   P ≠ 0 ) i ) ⌊ n P k ⌋ ( ∏ n i = P k ⌊ n P k ⌋ , ( i   m o d   P ≠ 0 ) i ) P^{\lfloor \frac{n}{P} \rfloor}(\lfloor \frac{n}{P} \rfloor)! (\underset{i=1,(i \ mod\ P \neq0)}{\overset{P^k}{\prod}}i)^{\lfloor \frac{n}{P^k} \rfloor}( \underset{i=P^k\lfloor \frac{n}{P^k} \rfloor,(i \ mod\ P \neq0)}{\overset{n}{\prod}}i) PPn(Pn)!(i=1,(i mod P=0)Pki)Pkn(i=PkPkn,(i mod P=0)ni)

    幂存在于 P ⌊ n P ⌋ P^{\lfloor \frac{n}{P} \rfloor} PPn ( ⌊ n P ⌋ ) ! (\lfloor \frac{n}{P} \rfloor)! (Pn)!中:
    所以设

    g ( n ) = ⌊ n P ⌋ + g ( ⌊ n P ⌋ ) g(n)=\lfloor \frac{n}{P} \rfloor+g(\lfloor \frac{n}{P} \rfloor) g(n)=Pn+g(Pn)

    时间复杂度仍为 O ( log ⁡ P n ) O(\log_{P}n) O(logPn)
    考虑下边界为 g ( 0 ) = 0 g(0)=0 g(0)=0
    最终式为:

    n ! P x m ! P y ( n − m ) ! P z P g ( n ) − g ( m ) − g ( n − m ) m o d    P k \frac{\frac{n!}{P^x}}{\frac{m!}{P^y}\frac{(n-m)!}{P^z}}P^{g(n)-g(m)-g(n-m)}\mod P^k Pym!Pz(nm)!Pxn!Pg(n)g(m)g(nm)modPk

    最后再用中国剩余定理合并即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扩展Lucas定理 的相关文章

  • 【Milvus的安装和使用】

    0 介绍 milvus是一个用于存储 index索引和管理巨量由深度学习网络或者其他模型生成embedding vectors的工具 不同于常见的关系型数据库用来处理结构化数据 Milvus被设计用来处理由非结构化数据 如图像 音频等 生成
  • 超链接打不开是什么原因html,超链接打不开是什么原因

    演示工具 电脑型号 华硕adolbook14 2020 系统版本 windows10 具体原因及解决方法 1 如果是链接到本地文件的超链接无法打开 可能是相对路径和绝对路径的问题 绝对地址 是有完全的路径 如果超链接的路径写错了 就无法打开
  • java 源码欣赏,Logback源码赏析-日志按时间滚动(切割)

    引言 用过Logback的同学们大多都知道Logback日志框架可以自动按照某个时间点切割日志的功能 但了解其中工作原理的同学可能并不是很多 楼主今天就带领各位了解一下其中的核心源码 本文的示例引用了Logback 1 1 7版的源码 举个
  • 60 KVM Skylark虚拟机混部-安装和配置

    文章目录 60 KVM Skylark虚拟机混部 安装和配置 60 1 安装Skylark 60 1 1 硬件要求 60 1 2 软件要求 60 1 3 安装方法 60 2 配置Skylark 60 2 1 日志 60 2 2 功耗干扰控制
  • FPGA UART仿真

    摘自威三学员尤凯元 tb文件 Copyright c 2014 2019 All rights reserved Author Youkaiyuan v3eduyky 126 com wechat 15921999232 File tb t
  • 微信支付sign签名工具类

    secretKey为商户平台设置的密钥key params为非空参数集合 public static String genSignature String secretKey Map
  • ubuntu从内核源代码编译内核及替换内核

    1 下载ubuntu对应的linux内核源代码 apt catch search linux source 查看当前linux内核版本 apt get install linux source lt 对应的内核版本好 gt 下载对应的lin

随机推荐

  • 不列颠哥伦比亚大学推出面向硕士生和博士生的区块链项目

    点击上方 蓝色字 可关注我们 暴走时评 加拿大领先的研究型大学之一 不列颠哥伦比亚大学 UBC 正在为研究生推出获得区块链技术教育的途径 该项目计划专注于四个领域 健康与保健 清洁能源 监管技术和土着居民问题 并将于明年1月正式启动 作者
  • 解决PytestUnknownMarkWarning: Unknown pytest.mark.pre - is this a typo?

    问题描述 在pytest框架中 执行标记的用例时 出现了如下提示 PytestUnknownMarkWarning Unknown pytest mark pre is this a typo 这个提示的大致意思是pytest找不到标记 发
  • &1的用法

    看到不少大神都喜欢用 1来判断一些东西 但是作为渣渣的我总是不理解这个 1到底是有什么作用 今天写了程序看了一下 其实是判断奇偶用的 如果是奇数 其结果为1 偶数结果为false 我在这里想吐槽一下 大神为什么不直接mod2判断呢 incl
  • NO.18 什么是拜占庭将军问题

    本文是转载 转载自苏神的博客 原文地址 https www jianshu com p 5fea30b25f0a 拜占庭将军问题很多人可能听过 但不知道是什么意思 本文从非专业的角度来讲讲 拜占庭将军问题到底是说什么的 拜占庭将军问题 By
  • Vue全局自定义指令 和 局部自定义指令

    文章目录 自定义指令 Vue全局自定义指令 Vue局部自定义指令 Vue钩子函数 Vue钩子函数传参数详解 钩子函数简写或者合并 自定义指令 除了Vue核心的内置指令 例如 v model 和 v show等 以外 Vue也允许自己定义指令
  • Parsing error Unexpected token错误解决方案

    问题描述 import动态导入 将js文件单独打包时 webpack打包错误 import test then res gt 文件加载成功 console log res mul 2 5 catch gt console log 文件加载失
  • android native 使用opengl es画点线面图形(纯c++)

    一 首先需要对EGL进行初始化 void Renderer initEGL const EGLint attribs EGL SURFACE TYPE EGL WINDOW BIT EGL BLUE SIZE 8 EGL GREEN SIZ
  • Deprecated: __autoload() is deprecated, use spl_autoload_register()

    官网是这样说的 spl autoload register PHP 5 gt 5 1 0 PHP 7 spl autoload register 注册给定的函数作为 autoload 的实现 说明 spl autoload register
  • ply补全为立方体_PLY 文件结构

    典型的 PLY 文件结构 头部 顶点列表 面片列表 其他元素列表 头部是一系列以回车结尾的文本行 用来描述文件的剩余部分 头部包含一个对每个元素类型的描述 包括元素名 如 边 这个元素在工程里有多少 以及一个与这个元素关联的不同属性的列表
  • 第八章 假设检验

    目录 一 假设检验的基本概念 假设及假设检验的定义 原假设与备择假设 基本思想 接受域与拒绝域 假设检验的分类 两类错误 二 一个正态总体下的参数假设检验 期望 方差的假设检验 三 两个正态总体下的参数假设检验 期望的差异性 方差的差异性的
  • 【H5】 svg的 defs用法 渐变

    defs defs元素用于预定义一个元素使其能够在SVG图像中重复使用 在元素中定义的图形不会直接显示在SVG图像上 要显 示它们需要使用元素来引入它们 symbol 元素用于定义可重复使用的符号 嵌入在元素中的图形是不会被直接显示 的 除
  • 前端高频面试题汇总(css,html)

    目录 H5 的新特性有哪些 C3 的新特性有哪些 如何使一个盒子水平垂直居中 如何实现双飞翼 圣杯 布局 CSS 的盒模型 CSS 中选择器的优先级以及 CSS 权重如何计算 列举 5 个以上的 H5 input 元素 type 属性值 C
  • Keil警告warning: #223-D: function “memcpy” declared implicitly

    使用memcpy 函数编译后出现警告 解决方案 在 h文件中加上头文件 include string h
  • GPTzero

    关于GPTzero 网址 https gptzero me 这是我今天才发现的网站 功能是你可以分辨任何人工智能写的文章与人为写的文章 注册方法 注册方法非常简单 只需要一个电子邮箱 我用的是outlook邮箱 其他的也行 使用方法 登录成
  • 【超分辨率】—基于深度学习的图像超分辨率最新进展与趋势

    1 简介 图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题 在医疗图像分析 生物特征识别 视频监控与安全等实际场景中有着广泛的应用 随着深度学习技术的发展 基于深度学习的图像超分方法在多个测试任务上 取得了目前最优的性能和效果
  • 我在修改jupyter字体的时候输入命令jt -l 遇到了jt既不是内部也不是外部命令咋整?...

    点击上方 Python爬虫与数据挖掘 进行关注 回复 书籍 即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 独立三边静 轻生一剑知 大家好 我是Python进阶者 一 前言 前几天在Python白银交流群 Joker 问了一
  • 如何在本地快速启动一个k8s集群?小技巧,学到了

    背景 最近在阅读 每天5分钟玩转Kubernetes 这本书 个人感觉是一本不错的 K8S 的入门书籍 我们在刚开始学习一项技术的时候 不论是通过官方文档 书籍 亦或是视频的形式 如果仅仅是去看 而不去练习实践的话 那么是很难将其真正应用起
  • JSTL的错误“attribute test does not accept any expressions”解决方法

    解决方法有2个 1 将 更改为 2 使用JSTL的备用库 将 更改为
  • 数据中台与数据仓库比较

    从三个点来说 1 提供服务的对象 2 业务域 3 层次的划分 1 提供服务的对象 a 数据仓库的服务对象基本上是人 明细数据 聚合指标 转化率模型 他们的目前用户都是人 b 数据中台的服务对象变成 人 机器 用户标签 机器学习模型 数据挖掘
  • 扩展Lucas定理

    本介绍主要是在学习后写下自己的理解 故以转载形式发出 题意 给定 n m p n m p n m p 求 C