zoukankan      html  css  js  c++  java
  • 『笔记』中国剩余定理(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,请食用

  • 相关阅读:
    UnityEngine中Animator相关类的说明
    MecanimControl插件随笔
    Mecanim Control
    Unity3D
    Unity Mecanim在大型mmo中的应用
    Unity3D 性能优化
    Unity3D 图形优化
    U3D开发性能优化笔记(待增加版本.x)
    通过JS语句判断WEB网站的访问端是电脑还是手机
    jquery 鼠标事件汇总
  • 原文地址:https://www.cnblogs.com/1123LXY/p/14249866.html
Copyright © 2011-2022 走看看