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

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

猜你喜欢

转载自blog.csdn.net/watqw/article/details/132181520