中国剩余定理的同态性质(CRT变换的同态性)

news2026/4/2 12:36:51

1、中国剩余定理简介(Chinese Remainder Theory,CRT)

中国剩余定理是关于求解一元线性同余方程组的方法,用形式化的描述就是: m 1 , m 2 , m n m_1,m_2,m_n m1,m2,mn是两两互素的n个整数,有下面的同余方程组:
{ x ≡ a 1 m o d    m 1 x ≡ a 2 m o d    m 2 . . . x ≡ a n m o d    m n ( m 1 , m 2 , ⋯   , m n ) 两两互素 \left\{ \begin{array}{lr} x\equiv a_1 \mod m_1& \\ x \equiv a_2 \mod m_2\\ ... \\ x\equiv a_n \mod m_n & \end{array} \right. (m_1,m_2,\cdots,m_n)两两互素 xa1modm1xa2modm2...xanmodmn(m1,m2,,mn)两两互素
现在定义 M = ∏ i = 1 n m i M=\prod_{i=1}^{n}m_i M=i=1nmi m i ′ = M m i m^\prime_i=\frac{M}{m_i} mi=miM,显然 M i M_i Mi是整数。
t i m i ′ ≡ 1 m o d    m i t_im^\prime_i\equiv 1 \mod m_i timi1modmi
那么同余方程组的解为
x ≡ ∑ i = 1 n a i t i m i ′ m o d    M x\equiv \sum_{i=1}^{n} a_it_im^\prime_i \mod M xi=1naitimimodM

下面给出几个例子:

a is [0, 2, 4, 0]
m is [5, 7, 9, 11]
m ′ m^\prime m is [693, 495, 385, 315]
t is [2, 3, 4, 8]

a is [1, 5, 5]
m is [5, 7, 9]
m ′ m^\prime m is [63, 45, 35]
t is [2,5, 8]

a is [2, 5, 7, 18]
m is [5, 7, 11, 19]
m ′ m^\prime m is [1463, 1045, 665, 385]
t is [2 4 9 4]

2、CRT变换是同态的

CRT变换具有加法同态和乘法同态。
我们假设存在 m = [ m 1 , m 2 , ⋯   , m n ] \mathbf{m}=[m_1,m_2,\cdots,m_n] m=[m1,m2,,mn],其元素是两两互素的。
Z M = [ 0 , 1 , 2 , ⋯   , M ] Z_M=[0,1,2,\cdots, M] ZM=[0,1,2,,M],其中 M = ∏ i = 1 n m i M=\prod_{i=1}^{n}m_i M=i=1nmi
那么 Z M Z_M ZM中的元素可以有 Z m 1 × Z m 2 × ⋯ × Z m n Z_{m_1} \times Z_{m_2} \times \cdots \times Z_{m_n} Zm1×Zm2××Zmn中的元素来唯一表示。
Z m 1 × Z m 2 × ⋯ × Z m n Z_{m_1} \times Z_{m_2} \times \cdots \times Z_{m_n} Zm1×Zm2××Zmn Z M Z_M ZM的变换为crt变换,反方向为icrt变换。
我们使用一个向量来表示 Z m 1 × Z m 2 × ⋯ × Z m n Z_{m_1} \times Z_{m_2} \times \cdots \times Z_{m_n} Zm1×Zm2××Zmn中的元素。第i维的值是模 m i m_i mi的。

x , y ∈ Z M x ,y \in Z_M x,yZM a = i c r t ( x ) \mathbf{a}=\mathbf{icrt}(x) a=icrt(x) b = i c r t ( y ) \mathbf{b}=\mathbf{icrt}(y) b=icrt(y)
加法

定义 c = a + b \mathbf{c}=\mathbf{a}+\mathbf{b} c=a+b,其中 c i = ( a i + b i ) m o d    m i c_i=(a_i+b_i) \mod m_i ci=(ai+bi)modmi

我们说中国剩余定理有加法同态,表示为:
x + y ≡ c r t ( c ) m o d    M x+y \equiv \mathbf{crt}(\mathbf{c}) \mod M x+ycrt(c)modM

证明:
由于当 n > 2 n \gt 2 n>2时可以归约到 n = 2 n=2 n=2的情况,所以,下面只证明 m = [ m 1 , m 2 ] \mathbf{m}=[m_1,m_2] m=[m1,m2]的情况。( k 1 , k 2 , ⋯ k_1,k_2,\cdots k1,k2,表示整数)

由中国剩余定理,我们知道
x = a 1 t 1 m 1 ′ + a 2 t 2 m 2 ′ + k 1 m 1 m 2 x=a_1t_1m^\prime_1+a_2t_2m^\prime_2 + k_1m_1m_2 x=a1t1m1+a2t2m2+k1m1m2,
y = b 1 t 1 m 1 ′ + a 2 t 2 m 2 ′ + k 2 m 1 m 2 y=b_1t_1m^\prime_1+a_2t_2m^\prime_2 + k_2m_1m_2 y=b1t1m1+a2t2m2+k2m1m2.

x + y = ( a 1 + b 1 ) t 1 m 1 ′ + ( a 2 + b 2 ) t 2 m 2 ′ + ( k 1 + k 2 ) m 1 m 2 x+y=(a_1+b_1)t_1m^\prime_1+(a_2+b_2)t_2m^\prime_2 + (k_1+k_2)m_1m_2 x+y=(a1+b1)t1m1+(a2+b2)t2m2+(k1+k2)m1m2

c 1 = a 1 + b 1 + k 3 m 1 , c 2 = a 2 + b 2 + k 4 m 2 c_1=a_1+b_1+k_3m_1,c_2=a_2+b_2+k_4m_2 c1=a1+b1+k3m1,c2=a2+b2+k4m2
所以
c r t ( c ) = k 3 m 1 t 1 m 1 ′ + k 4 m 2 t 2 m 2 ′ + x + y + k 5 m 1 m 2 \mathbf{crt}(c)=k_3m_1t_1m^\prime_1+k_4m_2t_2m^\prime_2+x+y+k_5m_1m_2 crt(c)=k3m1t1m1+k4m2t2m2+x+y+k5m1m2
又有 m 1 ′ = m 2 , m 2 ′ = m 1 m^\prime_1=m_2,m^\prime_2=m_1 m1=m2,m2=m1
所以 c r t ( c ) = ( k 3 t 1 + k 4 t 2 + k 5 ) m 1 m 2 + x + y \mathbf{crt}(c)=(k_3t_1+k_4t_2+k_5)m_1m_2+x+y crt(c)=(k3t1+k4t2+k5)m1m2+x+y

x + y ≡ c r t ( c ) m o d    M x+y \equiv \mathbf{crt}(\mathbf{c}) \mod M x+ycrt(c)modM

乘法
定义 d = x ∗ y \mathbf{d}=x*y d=xy,其中 d i = x i y i m o d    m i d_i=x_iy_i \mod m_i di=xiyimodmi

那么中国剩余定理有乘法同态。表示为:
x ∗ y ≡ c r t ( d ) m o d    M x*y \equiv \mathbf{crt}(\mathbf{d}) \mod M xycrt(d)modM

证明:
x ∗ y = ( a 1 t 1 m 1 ′ + a 2 t 2 m 2 ′ + k 1 m 1 m 2 ) ( b 1 t 1 m 1 ′ + a 2 t 2 m 2 ′ + k 2 m 1 m 2 ) x*y=(a_1t_1m^\prime_1+a_2t_2m^\prime_2 + k_1m_1m_2)(b_1t_1m^\prime_1+a_2t_2m^\prime_2 + k_2m_1m_2) xy=(a1t1m1+a2t2m2+k1m1m2)(b1t1m1+a2t2m2+k2m1m2)
m 1 m 2 m_1m_2 m1m2的倍数代换有
x ∗ y = a 1 b 1 t 1 2 m 1 ′ 2 + a 2 b 2 t 2 2 m 2 ′ 2 + k 3 m 1 m 2 x*y=a_1b_1t_1^2m_1^{\prime2}+a_2b_2t_2^2m_2^{\prime2}+k_3m_1m_2 xy=a1b1t12m1′2+a2b2t22m2′2+k3m1m2
由于 t 1 m 1 ′ ≡ 1 m o d    m 1 , t 2 m 2 ′ ≡ 1 m o d    m 2 t_1m_1^\prime\equiv 1 \mod m_1,t_2m_2^\prime \equiv 1 \mod m_2 t1m11modm1,t2m21modm2

x ∗ y = a 1 b 1 t 1 m 1 ′ + a 2 b 2 t 2 m 2 ′ + k 5 m 1 m 2 x*y=a_1b_1t_1m_1^\prime+a_2b_2t_2m_2^\prime+k_5m_1m_2 xy=a1b1t1m1+a2b2t2m2+k5m1m2
根据前面的证明,我们知道
x ∗ y ≡ c r t ( d ) m o d    M x*y \equiv \mathbf{crt}(\mathbf{d}) \mod M xycrt(d)modM

下面给出crt和其逆变换icrt的python代码,便于读者验证:

import gmpy2
import numpy as np

#the elements in bases should be co-prime
def crt(a,bases):
    bases=np.array(bases,dtype=gmpy2.mpz)
    M=np.prod(bases)
    m_prime=[np.prod(bases[bases!=bases[i]]) for i in range(len(bases))]
    b=[gmpy2.invert(m_prime[i],bases[i]) for i in range(len(bases))]
    res=gmpy2.mpz(0)
    for i in range(len(bases)):
        res=(res+a[i]*b[i]*m_prime[i])%M
    res=np.array(res,dtype=int)
    return res,M

def icrt(r,bases):
    res=[r%bases[i] for i in range(len(bases))]
    return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-队列(C语言的简单实现)

简介 队列也是一种数据结构,队列也可以用来存放数字每次只能向队列里将入一个数字,每次只能从队列里获得一个数字在队列中,允许插入的一段称为入队口,允许删除的一段称为出队口它的原则是先进先出(FIFO: first in first out)&…

Java8实战-总结15

Java8实战-总结15 引入流流简介流与集合 引入流 流简介 要讨论流,先来谈谈集合,这是最容易上手的方式。Java 8中的集合支持一个新的stream方法,它会返回一个流(接口定义在java.util.stream.Stream里)。在后面会看到,还有很多其他…

自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”

各位CSDN的uu们好呀,好久没有更新小雅兰的C专栏啦,话不多说,让我们进入类和对象的世界吧!!! 类的6个默认成员函数 构造函数 析构函数 拷贝构造函数 类的6个默认成员函数 如果一个类中什么成员都没有&am…

C 语言中,「.」与「->」有什么区别?

使用“.”的话,只需要声明一个结构体。格式是结构体类型名结构体名。然后通过结构体名加上“.”再加上域名,就可以引用结构体的域了。因为结构体的内存是自动分配的,就像使用int a;一样。而使用“->”的话,需要声明一个结构体的…

【三维编辑】Seal-3D:基于NeRF的交互式像素级编辑

文章目录 摘要一、引言二、方法2.1.基于nerf的编辑问题概述2.2.编辑指导生成2.3.即时预览的两阶段学生训练 三、实验总结 项目主页: https://windingwind.github.io/seal-3d/ 代码:https://github.com/windingwind/seal-3d/ 论文: https://arxiv.org/pdf/2307.15131…

vue3 动态导入src/page目录下的所有子文件,并自动注册所有页面组件

main.js添加一下代码: const importAll (modules) > {Object.keys(modules).forEach((key) > {const component key.replace(/src/, /).replace(.vue, );const componentName key.split(/).slice(-2, -1)[0] -page;app.component(componentName, modules…

Vue2-简介、模板语法、数据绑定、MVVM、数据代理、事件处理

🥔:成功之后就能光明正大地回望所有苦难 VUE-Day1 Vue简介1、Vue是什么?2、谁开发的? 发展历程?3、Vue的特点4、容器和实例、实例中的el和data总结 Vue模板语法插值语法指令语法 数据绑定1.单向数据绑定(v-…

SpringBoot入职学习

一、前言 公司入职,第一个事是把公司项目运行起来。然后在经过几天的颠沛流离,遇到一个事情。在创建yml文件的时候,需要设置自己的配置文件。当然还是先跑起来项目,就使用别人的yml文件。但是,到springboot配置那里卡…

视频抠像软件有哪些?简单好用视频抠像软件分享

在视频后期制作中,抠像通常用于将视频中的某个元素从其背景中分离出来。这种处理技术可以用于各种用途,比如创建特效、添加背景,或者将视频元素组合到新场景中。在电影、电视剧和广告等专业的影视制作中,抠像是一个常见的技术步骤…

cesium学习记录04-坐标系

一、地理坐标系和投影坐标系的关系 地理坐标系 (Geographic Coordinate System, GCS) 定义:地理坐标系是一个基于三维地球表面的坐标系统。它使用经度和纬度来表示地点的位置。 特点: 使用经纬度来定义位置。 基于特定的地球参考椭球体。 适用于全球范…

2023河南萌新联赛第(五)场:郑州轻工业大学 --亚托莉 -我挚爱的时光-

题目描述 亚托莉,-我挚爱的时光- 亚托莉自身机器可能有出了一点小故障,希望你能帮助她解决这个问题~ 亚托莉内部的操作系统的是 Linux 操作系统,不同于 Windows 操作系统。在大多数情况下, Linux 操作系统一般是通过…

死磕Android性能优化,卡顿原因与优化方案

随着移动互联网的快速发展,Android应用的性能优化变得尤为重要。卡顿是用户体验中最常见的问题之一,它会导致应用的响应变慢、界面不流畅,甚至影响用户的使用体验。因此,我们需要深入了解卡顿问题的原因,并寻找相应的解…

(Python)Requests+Pytest+Allure接口自动化测试框架从0到1搭建

前言:本文主要介绍在企业使用Python搭建接口自动化测试框架,数据驱动读取excel表里的数据,和数据库方面的交互,包括关系型数据库Mysql和非关系型数据库MongDB,连接数据库,读取数据库中数据,最后…

刷题DAY18

题目一 LRU算法的实现 做一个key-value结构 假如说这个LRU的大小为3 那么就是当KEY-value没满的时候 直接顺序加入 当满了的时候 把最长时间没有使用的key-value替换掉 要求实现一个put 和 get行为 时间复杂度均为O(1) 用双向链表哈希表实现 哈希表可以用系统封装的双向链表…

node笔记——调用免费qq的smtp发送html格式邮箱

文章目录 ⭐前言⭐smtp授权码获取⭐nodemailer⭐postman验证接口⭐结束 ⭐前言 大家好,我是yma16,本文分享关于node调用免费qq的smtp发送邮箱。 node系列往期文章 node_windows环境变量配置 node_npm发布包 linux_配置node node_nvm安装配置 node笔记_h…

嵌入式开发的学习与未来展望:借助STM32 HAL库开创创新之路

引言: 嵌入式开发作为计算机科学领域的重要分支,为我们的日常生活和产业发展提供了无限的可能。STMicroelectronics的STM32系列芯片以其出色的性能和广泛的应用领域而备受关注。而STM32 HAL库作为嵌入式开发的高级库,为学习者提供了更高效、更…

Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙…

浅谈JVM中的即时编译器(Just-In-Time compiler, JIT)

Java虚拟机(JVM)中的即时编译器(Just-In-Time compiler, JIT)是一个非常重要的组件,它负责将字节码转换为本地机器代码。在不使用JIT的情况下,JVM通过解释字节码来执行程序,这意味着它会为每个字…

24届近5年上海理工大学自动化考研院校分析

今天学姐给大家带来的是上海理工大学控制考研分析 满满干货~还不快快点赞收藏 一、上海理工大学 学校简介 上海理工大学(University of Shanghai for Science and Technology)是一所以工学为主,工学、理学、经济学、管理学、文…

如何实现Excel中多级数据联动

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在类Excel表格应用中,常用的需求场景是根据单元格之间的数据联动&…