中国剩余定理

18 篇文章 0 订阅
6 篇文章 0 订阅

描述

​ 用于解决 x m o d    a 1 = c 1 , x m o d    a 2 = c 2 . . . x\mod a_1 = c_1, x \mod a_2 = c_2 ... xmoda1=c1,xmoda2=c2... x x x的问题。

证明

从假设可知,对任何 i ∈ { 1 , 2 , ⋯   , n } i \in \{1, 2, \cdots , n\} i{1,2,,n},由于$\forall j \in {1, 2, \cdots , n}, ; j\neq i, ; ; \operatorname{gcd}(m_i, m_j) = 1 , 所 以 ,所以 \operatorname{gcd}(m_i, M_i) = 1.$ 这说明存在整数 t i t_i ti使得 t i M i ≡ 1 ( m o d m i ) . t_i M_i \equiv 1 \pmod {m_i}. tiMi1(modmi).

对于乘积 a i t i M i a_i t_i M_i aitiMi可知:
:$a_i t_i M_i \equiv a_i \cdot 1 = a_i \pmod {m_i}, $
😒\forall j \in {1, 2, \cdots , n}, ; j\neq i, ; ; a_j t_j M_j \equiv 0 \pmod {m_i}. $
所以 x = a 1 t 1 M 1 + a 2 t 2 M 2 + ⋯ + a n t n M n x = a_1 t_1 M_1 + a_2 t_2 M_2 + \cdots + a_n t_n M_n x=a1t1M1+a2t2M2++antnMn满足:
😒\forall i \in {1, 2, \cdots , n}, ; ; x = a_i t_i M_i + \sum_{j \neq i} a_j t_j M_j \equiv a_i + \sum_{j \neq i} 0 = a_i \pmod {m_i}. $
这说明 x x x就是方程组的一个解。

代码

int CRT(int a[],int m[],int n)
{
    int M = 1;
    int ans = 0;
    for(int i=1; i<=n; i++)
        M *= m[i];
    for(int i=1; i<=n; i++)
    {
        int x, y;
        int Mi = M / m[i];
        extend_Euclid(Mi, m[i], x, y);
        ans = (ans + Mi * x * a[i]) % M;
    }
    if(ans < 0) ans += M;
    return ans;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值