首页 > 其他分享 >拓展中国剩余定理 exCRT

拓展中国剩余定理 exCRT

时间:2022-08-22 07:45:01浏览次数:89  
标签:剩余 frac int 定理 exCRT 1k mod inv equiv

求解如下形式的一元线性同余方程组(其中 \(n_1, n_2, ···, n_k\) 两两互质)

\[\left\{ \begin{matrix}x & \equiv & a_1 & (mod \ n_1)\\ x & \equiv & a_2 & (mod \ n_2)\\ \vdots\\ x & \equiv & a_k & (mod \ n_k)\end{matrix} \right. \]

  • 推导:从简单入手,先考虑同于方程组只有两个式子的情况

\[x\equiv c_1\ (mod\ m_1) \]

\[x\equiv c_2\ (mod\ m_2) \]

变形:

\[x = c_1 + m_1k_1 \]

\[x = c_2 + m_2k_2 \]

联立:

\[c_1 + m_1k_1 = c_2 + m_2k_2 \]

移项:

\[m_1k_1 = c_2 - c_1 + m_2k_2 \]

用 \((a, b)\) 表示 \(a\) 和 \(b\) 的最大公约数。
方程有解的条件为 \((m_1, m_2)|(c_2-c_1)\).
对于上面的方程,两边同除 \((m_1,m_2)\)

\[\frac{m_1k_1}{(m_1,m_2)}=\frac{(c_2-c_1)}{(m_1,m_2)}+\frac{m_2k_2}{(m_1,m_2)} \]

转换:

\[\frac{m_1}{(m_1,m_2)}k_1\equiv\frac{c_2-c_1}{(m_1,m_2)}(mod\ \frac{m_2}{(m_1,m_2)}) \]

同余式两边同除 \(\frac{m_1}{(m_1,m_2)}\)

\[k_1\equiv inv(\frac{m_1}{(m_1,m_2)},\frac{m_2}{(m_1,m_2)})×\frac{(c_2-c_1)}{(m_1,m_2)}(mod\ \frac{m_2}{(m_1,m_2)}) \]

\[k_1 = inv(\frac{m_1}{(m_1,m_2)},\frac{m_2}{(m_1,m_2)})×\frac{(c_2-c_1)}{(m_1,m_2)}+ \frac{m_2}{(m_1,m_2)} × y \]

\(inv(a, b)\) 表示 \(a\) 在模 \(b\) 意义下的逆元。
将 \(k_1\) 代入 \(x = c_1 + m_1k_1\)
得:

\[x = inv(\frac{m_1}{(m_1,m_2)},\frac{m_2}{(m_1,m_2)})×\frac{(c_2-c_1)}{(m_1,m_2)} × m_1 + \frac{m_1m_2}{(m_1,m_2)} × y + c_1 \]

\[x \equiv inv(\frac{m_1}{(m_1,m_2)},\frac{m_2}{(m_1,m_2)})×\frac{(c_2-c_1)}{(m_1,m_2)} × m_1 + c_1 \ (mod\ \frac{m_1m_2}{(m_1,m_2)}) \]

推广一下

我们每次把两个同余式合并,求解之后得到一个新的同余式。再把新的同余式和其他的联立,最终就可以求出满足条件的解。

【模板】扩展中国剩余定理(EXCRT)

code
const int N = 1e5 + 10;

int n, M[N], C[N];

int gcd(int a, int b)
{
    return !b ? a : gcd(b, a % b);
}

int exgcd(int a, int b, int &x, int &y)
{
    if (!b)
    {
        x = 1, y = 0;
        return a;
    }
    int d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

int inv(int a, int b)
{
    int x, y;
    exgcd(a, b, x, y);
    return x < 0 ? x += b : x;
}

int main()
{
    rd(n);
    for (int i = 1; i <= n; i ++ )
        rd(M[i]), rd(C[i]);
    bool flag = 1;
    for (int i = 2; i <= n; i ++ )
    {
        int M1 = M[i - 1], M2 = M[i], C1 = C[i - 1], C2 = C[i], t = gcd(M1, M2);
        if ((C2 - C1) % t != 0)
        {
            flag = 0;
            break;
        }
        M[i] = (M1 * M2) / t;
        C[i] = (inv(M1 / t, M2 / t) * (C2 - C1) / t) % (M2 / t) * M1 + C1;
        C[i] = (C[i] % M[i] + M[i]) % M[i];
    }
    if (flag)
        print(C[n]);
    else puts("");
    return 0;
}

标签:剩余,frac,int,定理,exCRT,1k,mod,inv,equiv
From: https://www.cnblogs.com/kroyosh/p/16611625.html

相关文章

  • 贝祖定理
    中文名: 裴蜀定理别名: 贝祖定理外文名: Bézout'sidentity应用学科: 数学方程式是:丢番图方程(裴蜀方程)对任何整数a、b和它们的最大公约数gcd(a,b),关于未知数......
  • 1026 [NOIP2001]Car的旅行路线 标点建图 勾股定理 floyd
     链接:https://ac.nowcoder.com/acm/contest/26077/1026来源:牛客网题目描述又到暑假了,住在城市A的Car想和朋友一起去城市B旅游。她知道每个......
  • acwing204.表达整数的奇怪方式(中国剩余定理)
    中国剩余定理中国剩余定理百度百科不定方程\(ax+by=gcd(a,b)\)的解先用扩展欧几里得算法求得不定方程的一组特解:\(x_0,y_0\)则不定方程的通解为\[\left\{\begin......
  • 洛谷 P6789 - 寒妖王(子集卷积+矩阵树定理)
    洛谷题面传送门像极了我验的那道牛客多校(第六场CForest)……考虑对于每条边,计算其在最大生成基环森林中的概率,乘以边权求和就是答案。现在问题在于如何计算每条边在最大......
  • Young's theorem杨氏定理
    杨氏定理定理叙述参考百度百科。Young'sTheorem:Let\(f\)beadifferentiablefunctionof\(n\)variables.Ifeachofthecross-partials\(f_{ij}^{\prime\pr......