一个思考Exlucas时的错误思路和对CRT的一些理解

一个思考Exlucas时的错误思路和对CRT的一些理解

小引

此文章是记录一些学习 \(Exlucas\) 时纠结的问题。

问题的原因是对 \(CRT\) 的理解不通彻,在此做出一些探讨。

正文

\(Exlucas\) 的模板问题是求:
\[
C^{n}_{m}\quad(mod\;p)
\]
其中, \(n\) , \(m\) 很大,不能够直接求阶乘。\(p\) 大小可接受但是不保证是质数。

扩展的思路是把 \(p\) 进行质因数分解,然后分别模分解后的 \(p_i^k\) 再用 \(CRT\) 组合起来。

我当时刚刚学完 \(Lucas\) 以为扩展是赤裸裸的 \(CRT+Lucas\) 就想直接模 \(p_i\) 不行吗?

并且陷入了这样一个问题:

给定 \(x\) 满足:
\[
\begin{cases}
x\equiv a_1\quad(mod\;p_1)\x\equiv a_2\quad(mod\;p_2)\\cdots\x\equiv a_n\quad(mod\;p_n)\\end{cases}
\\bf 和\\rm
\begin{cases}
x\equiv b_1\quad(mod\;p_1^{k_1})\x\equiv b_2\quad(mod\;p_2^{k_2})\\cdots\x\equiv b_n\quad(mod\;p_n^{k_n})\\end{cases}
\]
作为前提的 \(x\) 是一样的,那么 \(CRT\) 为什么解出来的不同的 \(x\) 呢。(当时我真的是蠢枯了

现在看来,显而易见,\(x\) 不是唯一的,而是以所以模数的公倍数 \(M\) 为间隔的无限个数。

我们求出来的是满足条件的最小正整数解。第一个和第二个的解的关联是这样的:

所以,我们用 \(p_i\) 那租解出来的和 \(p_i^{k_i}\) 那组解出来的不是一个,而且也没法(或者我不知道,但是既然 \(Exlucas\) 还存在,那应该是没有)用其中一个还原另外一个。

所以,必须对 \(p_i^{k_i}\) 取模,就需要 \(Exlucas\) 的那些操作了。



\(\frak by\;thorn\_\)

原文地址:https://www.cnblogs.com/thornblog/p/12235355.html

时间: 2024-10-06 23:09:09

一个思考Exlucas时的错误思路和对CRT的一些理解的相关文章

visual studio 2015 IOS开发连接mac时提示错误couldn't connect to xxxx, please try again的一个方法

本人使用虚拟机MAC.原本使用虚拟机中的VS2015连接正常没有问题. 但是当把MAC的虚拟机文件COPY到另一个机器上,提示“couldn't connect to xxxx,  please try again”. 经过查找和升级MAC中的Xamarin.ios都不行.后面尝试添加新的MAC(在VS的连接页面左下角有一个“add mac..."),直接输入MAC的IP,竟然连接上了. 分析原因可能是自动找到的使用MAC机器名的有些问题,但不确定.仅供各位参考. visual studio 2

一天一个Java基础——通过异常处理错误

<Thinking in Java>上对这章的讲解不少,可见重要性,学习和总结一些主要的记录下来. 一.创建自定义异常 1 package Exception; 2 3 class SimpleException extends Exception{} 4 5 public class InheritingException{ 6 7 public void f() throws SimpleException { 8 System.out.println("Throw Simple

一个令人蛋疼的链接错误

背景 我们APP的引擎包engine.so,包含了A.B.C三个工程,但每次都是源码形式编译,导致svn上存在多份相同代码拷贝.非常不科学...核心的B工程由我维护,整个SO编译工程由多个人维护.于是乎偶进行了一次升级:将B源代码从so工程中解耦:将B打成一个静态库,然后编译So的时候链接静态库. 开始行动 基本思路:将B的源码包到一个guide_b外壳工程中,ndk-build生成guide_b.so 的同时诱导生成libB.a静态库,然后这个libB.a可以发布. android的编译目录实

[ArchLinux]进行更新时出现错误:GPGME error: 无数据,数据库无效的解决办法/

今天在我进行系统更新pacman -Syu时,出现了如下错误: # pacman -Syu 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 错误:GPGME error: 无数据 :: 正在同步软件包数据库... core 已经是最新版本 0.0 B 0.00B/s 00:00 [----------------------] 0% extra 已经是最新版本 0.0 B 0.00B/

Linux下使用vi新建文件保存文件时遇到错误:E212: Can&#39;t open file for writing

出现E212: Can't open file for writing的问题是由于权限问题导致的,解决方法有以下思路: 1.使用root进行登录,然后再操作. 2.在使用命令时,前面加sudo. 3.如果是多级文件夹的文件时,由于这个文件夹没有创建,所以要先创建这个文件夹,再来操作这个文件. Linux下使用vi新建文件保存文件时遇到错误:E212: Can't open file for writing

WCF 获取数据对象时,报“基础连接已经关闭: 接收时发生错误”

今天,在使用WCF返回一个对象时,遇到一个错误:基础连接已经关闭: 接收时发生错误.经过大半天的排查,原来是一个不起眼的东西在搞鬼: this.Configuration.ProxyCreationEnabled = true; 就是上面的代码中的 true 导致了程序报错,之后把 true 改成了 false 问题就解决了. 微软的官方对ProxyCreationEnabled的解释中这样阐述:即使使用此旗標來啟用 Proxy 建立,也只會針對符合進行 Proxy 處理需求的實體類型來建立 P

WinXP SP3 下安装 Android SDK,模拟器启动时出现错误...

============问题描述============ WinXP SP3 下安装 Android SDK,模拟器启动时出现错误. 安装了两个版本的 Android SDK,都是一样的. installer_r23.0.2-windows.exe 和 installer_r22.6-windows.exe 请问怎么可以解决这个问题?多谢!!! ============解决方案1============ 这个自带的模拟器太慢,下一个bluestakes或genymotion吧 =========

JBPM在Eclipse中运行时页面错误ProcessEngine cannot be resolved to a type

JBPM在Eclipse中运行时页面错误ProcessEngine cannot be resolved to a type 从网上找了一些杂七杂八的回答,比如在Java EE Module Dependencies设置中添加依赖的jar 但是这个设置是以前旧版本的Eclipse所有的.新版的已经没有这个设置. 归根结底是因为我自己创建了一个UserLibrary.引入了jbpm依赖的所有jar 结果无法发布到tomcat中. 干脆把这个引用删掉,直接复制所有jar到项目的lib文件夹下. 一切

MYSQL导入数据时,出现错误:Incorrect string value: &#39;\xF0\x9F...&#39; for column &#39;XXX&#39; at row 1

Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而MySQL的utf8编码最多3个字节,所以数据插不进去. 我的解决方案是这样的 1.在mysql的安装目录下找到my.ini,作如下修改: [mysqld] character-set-server=utf8mb4 [mysql] default-character-