zoukankan      html  css  js  c++  java
  • [NOI2018] 屠龙勇士

    考虑我们显然可以用一次 (nlogn) 的过程,求出如果可以砍第 (i) 头,他将使用的刀的攻击力。
    于是我们转为求这样一个方程组:
    (left{ egin{aligned} m_1a_1equiv b_1pmod{q_1}\ m_2a_2equiv b_2pmod{q_2}\ .....\ m_3a_3equiv b_3pmod{q_3}\ end{aligned} ight.)

    我们发现他并不好解。
    那么我们就只能考虑使用(exgcd),显然如果有方程没解,则全局无解。
    我们单独拉一个出来看(maequiv bpmod p)
    我们则有(ma + kp = b)
    设解为(S_a,S_p)
    通解公式有:
    那么就有(a = S_a + kfrac{p}{gcd(m,p)})
    于是我们转为了这个方程:(aequiv S_apmod{frac{p}{gcd(m,p)}})
    于是我们可以使用(exCRT)求解。
    (exCRT)说白了就是合并这个同余方程。
    (aequiv C_1pmod {P_1})
    (aequiv C_2pmod {P_2})
    所以有
    (x = C_1 + P_1 y_1)
    (x = C_2 + P_2 y_2)
    所以有:
    (P_1y_1 = P_2y_2 + C_1 - C_2)
    同除这个(gcd(P_1,P_2))
    那么有(frac{P_1}{gcd(P_1,P_2)}y_1 = frac{P_2}{gcd(P_1,P_2)}y_2 + frac{C_1 - C_2}{gcd(P_1,P_2)})
    (frac{P_1}{gcd(P_1,P_2)}y_1 equiv frac{C_1 - C_2}{gcd(P_1,P_2)}pmod{frac{P_2}{gcd(P_1,P_2)}})
    此时系数和膜数互质。
    (y_1 equiv frac{C_1 - C_2}{gcd(P_1,P_2)} * inv(frac{P_1}{gcd(P_1,P_2)},frac{P_2}{gcd(P_1,P_2)})pmod{frac{P_2}{gcd(P_1,P_2)}})
    此时
    (y_1 = frac{C_1 - C_2}{gcd(P_1,P_2)} * inv(frac{P_1}{gcd(P_1,P_2)},frac{P_2}{gcd(P_1,P_2)}) + kfrac{P_2}{gcd(P_1,P_2)})

    带回原式,有:
    (x equiv C_1 + P_1(frac{(C_1 - C_2)}{gcd(P_1,P_2)} * inv(frac{P_1}{gcd(P_1,P_2)},frac{P_2}{gcd(P_1,P_2)})mod frac{P2}{gcd(P_1,P_2)}) pmod {frac{P_1P_2}{gcd(P_1,P_2)}})

  • 相关阅读:
    包含min函数的栈
    栈的应用
    给定金额m和红包数量n
    顺时针打印矩阵
    二叉树的镜像
    elementUI table表头错位问题
    金额格式化
    ajax跨域问题全解
    JavaScript 的 this 原理
    vue技术分享-你可能不知道的7个秘密
  • 原文地址:https://www.cnblogs.com/dixiao/p/15251522.html
Copyright © 2011-2022 走看看