• 『笔记』中国剩余定理(CRT)


    定义

    中国剩余定理(Chinese Remainder Theorem, CRT)可求解如下形式的一元线性同余方程组(其中 (w_1,w_2,w_3……w_n) 两两互质):

    [egin{cases} xequiv b_1 (mod w_1) \x equiv b_2 (mod w_2)\x equiv b_3 (mod w_3)\x equiv b_4 (mod w_4) \ …… \x equiv b_n (mod w_n) end{cases}]

    然而这个东西相对于同样可以解决这个问题的(excrt) 有着很大的限制,所以在这里并不做过多说明

    应用

    还是上面的方程组,求满足这个方程组的最小非负整数解 (x)

    假设(M=prod_{i=1}^{k-1} lcm(w_i,M))

    首先我们已经假设求出了前 (k-1) 个方程的解 (x_0) ,那么前 (k-1) 个方程的通解即为

    [x_0+i imes M (iin Z) ]

    那么现在引入第 (k) 个方程

    那么也就是找出一个正整数 (t) 使得

    [x_0+t imes Mequiv b_i (mod w_k) ]

    成立

    移项可以得到

    [t imes Mequiv b_i-x_0 (mod w_k) ]

    那么这个方程可以用扩欧求得解 (t)

    此时的答案 (x) 即为 $x_0+t imes M $

    实现

    注:该实现仅代表本人的一点见解,由于初学,知识浅薄,仅能理解到表面,如有差错请指出

    首先可以把(M=m_1,x=b_1)用第一个方程作为基层来一步步求得后面的方程

    当我们通过扩欧求得的 (t) 的时候,此时我们是求得的方程原型为

    [t imes M+y imes w_k=gcd(M,w_k) ]

    要想进一步求得真正的 (t) 还要乘上 (c/gcd(M,w_k))才可以,并且此时的模数可以为 (b),应用龟速乘进行求解即可

    然后更新(M=M imes w_k/gcd(M,w_k))

    直到完成为止

    代码

    完整代码OVO,请食用

  • 相关阅读:
    Iterator接口源码阅读
    Iterator接口实现类
    Enumeration接口源码阅读
    lambda表达式
    方法引用
    JAVA并发之AQS概述
    牛牛取快递——从dfs到dijkstra以及堆优化的dijkstra
    牛客2018java模拟编程题
    排序算法java实现以及简易性能测试
    java 死锁例子以及闭锁使用确保死锁产生
  • 原文地址:https://www.cnblogs.com/1123LXY/p/14249866.html
Copyright © 2020-2023  润新知