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

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

中国剩余定理是关于求解一元线性同余方程组的方法,用形式化的描述就是:m1,m2,mnm_1,m_2,m_nm1,m2,mn是两两互素的n个整数,有下面的同余方程组:
{x≡a1mod  m1x≡a2mod  m2...x≡anmod  mn(m1,m2,⋯ ,mn)两两互素 \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=1nmiM=\prod_{i=1}^{n}m_iM=i=1nmimi′=Mmim^\prime_i=\frac{M}{m_i}mi=miM,显然MiM_iMi是整数。
timi′≡1mod  mit_im^\prime_i\equiv 1 \mod m_itimi1modmi
那么同余方程组的解为
x≡∑i=1naitimi′mod  Mx\equiv \sum_{i=1}^{n} a_it_im^\prime_i \mod Mxi=1naitimimodM

下面给出几个例子:

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

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

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

2、CRT变换是同态的

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

x,y∈ZMx ,y \in Z_Mx,yZMa=icrt(x)\mathbf{a}=\mathbf{icrt}(x)a=icrt(x)b=icrt(y)\mathbf{b}=\mathbf{icrt}(y)b=icrt(y)
加法

定义c=a+b\mathbf{c}=\mathbf{a}+\mathbf{b}c=a+b,其中ci=(ai+bi)mod  mic_i=(a_i+b_i) \mod m_ici=(ai+bi)modmi

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

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

由中国剩余定理,我们知道
x=a1t1m1′+a2t2m2′+k1m1m2x=a_1t_1m^\prime_1+a_2t_2m^\prime_2 + k_1m_1m_2x=a1t1m1+a2t2m2+k1m1m2,
y=b1t1m1′+a2t2m2′+k2m1m2y=b_1t_1m^\prime_1+a_2t_2m^\prime_2 + k_2m_1m_2y=b1t1m1+a2t2m2+k2m1m2.

x+y=(a1+b1)t1m1′+(a2+b2)t2m2′+(k1+k2)m1m2x+y=(a_1+b_1)t_1m^\prime_1+(a_2+b_2)t_2m^\prime_2 + (k_1+k_2)m_1m_2x+y=(a1+b1)t1m1+(a2+b2)t2m2+(k1+k2)m1m2

c1=a1+b1+k3m1,c2=a2+b2+k4m2c_1=a_1+b_1+k_3m_1,c_2=a_2+b_2+k_4m_2c1=a1+b1+k3m1,c2=a2+b2+k4m2
所以
crt(c)=k3m1t1m1′+k4m2t2m2′+x+y+k5m1m2\mathbf{crt}(c)=k_3m_1t_1m^\prime_1+k_4m_2t_2m^\prime_2+x+y+k_5m_1m_2crt(c)=k3m1t1m1+k4m2t2m2+x+y+k5m1m2
又有m1′=m2,m2′=m1m^\prime_1=m_2,m^\prime_2=m_1m1=m2,m2=m1
所以crt(c)=(k3t1+k4t2+k5)m1m2+x+y\mathbf{crt}(c)=(k_3t_1+k_4t_2+k_5)m_1m_2+x+ycrt(c)=(k3t1+k4t2+k5)m1m2+x+y

x+y≡crt(c)mod  Mx+y \equiv \mathbf{crt}(\mathbf{c}) \mod Mx+ycrt(c)modM

乘法
定义d=x∗y\mathbf{d}=x*yd=xy,其中di=xiyimod  mid_i=x_iy_i \mod m_idi=xiyimodmi

那么中国剩余定理有乘法同态。表示为:
x∗y≡crt(d)mod  Mx*y \equiv \mathbf{crt}(\mathbf{d}) \mod Mxycrt(d)modM

证明:
x∗y=(a1t1m1′+a2t2m2′+k1m1m2)(b1t1m1′+a2t2m2′+k2m1m2)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)
m1m2m_1m_2m1m2的倍数代换有
x∗y=a1b1t12m1′2+a2b2t22m2′2+k3m1m2x*y=a_1b_1t_1^2m_1^{\prime2}+a_2b_2t_2^2m_2^{\prime2}+k_3m_1m_2xy=a1b1t12m1′2+a2b2t22m2′2+k3m1m2
由于t1m1′≡1mod  m1,t2m2′≡1mod  m2t_1m_1^\prime\equiv 1 \mod m_1,t_2m_2^\prime \equiv 1 \mod m_2t1m11modm1,t2m21modm2

x∗y=a1b1t1m1′+a2b2t2m2′+k5m1m2x*y=a_1b_1t_1m_1^\prime+a_2b_2t_2m_2^\prime+k_5m_1m_2xy=a1b1t1m1+a2b2t2m2+k5m1m2
根据前面的证明,我们知道
x∗y≡crt(d)mod  Mx*y \equiv \mathbf{crt}(\mathbf{d}) \mod Mxycrt(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值