类欧几里得学习小计

现在才会类欧我好菜啊,而且是简单的部分

特殊类欧

  • L ≤ v x % M ≤ R L\leq vx\%M\leq R Lvx%MR的最小的 x x x

  • f ( M , v , L , R ) f(M,v,L,R) f(M,v,L,R)为上面的答案 ( 0 < v < M , 0 ≤ L , R < M ) (0(0<v<M,0L,R<M)

  • 按照一般的套路,将特殊的情况判掉,最后再缩减范围即可。

  • 首先保证 0 ≤ L ≤ R < M 0\le L\le R0LR<M,否则如果 L ≤ 0 ≤ R L\le 0\le R L0R x = 0 x=0 x=0

  • 然后判断无解的情况

    • 因为所有 v x % M vx\%M vx%M一定可以表示成 k ∗ g c d ( M , v ) k*gcd(M,v) kgcd(M,v),所以要求:
    • ⌊ L − 1 ( M , v ) ⌋ + 1 ≤ ⌊ R ( M , v ) ⌋ \left \lfloor \frac{L-1}{(M,v)} \right \rfloor+1\le\left \lfloor \frac{R}{(M,v)} \right \rfloor (M,v)L1+1(M,v)R
  • 最小解

    • 如果 ⌊ L − 1 v ⌋ + 1 ≤ ⌊ R v ⌋ \left \lfloor \frac{L-1}{v} \right \rfloor+1 \le\left \lfloor \frac{R}{v} \right \rfloor vL1+1vR
    • 显然 x = ⌊ L − 1 v ⌋ + 1 x=\left \lfloor \frac{L-1}{v} \right \rfloor+1 x=vL1+1为最小的解。
    • 否则就满足 L % v ≤ R % v L\%v\le R\%v L%vR%v
  • 修改 v v v保证时间复杂度

    • 如果 2 v ≥ M 2v\ge M 2vM,不妨全部取一个负数。
    • f ( M , v , L , R ) = f ( M , M − v , M − R , M − L ) f(M,v,L,R)=f(M,M-v,M-R,M-L) f(M,v,L,R)=f(M,Mv,MR,ML)
    • 那么保证了 v ≤ M 2 v\le\frac{M}{2} v2M
  • 那么现在有 L ≤ v x % M ≤ R L\le vx\%M \le R Lvx%MR

  • L ≤ v x − p M ≤ R L\le vx-pM\le R LvxpMR,左右 % v \%v %v得到:

  • L % v ≤ ( v − M % v ) p ≤ R % v L\%v\le (v-M\%v)p\le R\%v L%v(vM%v)pR%v,在 % v \%v %v下要求一个最小的 p p p,然后就可以凑一个 x x x使得满足原问题了。

  • 这个也是一个子问题 p = f ( v , v − M % v , L % v , R % v ) p=f(v,v-M\%v,L\%v,R\%v) p=f(v,vM%v,L%v,R%v),由于上面对 v v v保证 v ≤ M 2 v\le\frac{M}{2} v2M,所以是 O ( l o g ) O(log) O(log)的。

  • x = ⌊ L + p M − 1 v ⌋ + 1 x=\left \lfloor \frac{L+pM-1}{v} \right \rfloor+1 x=vL+pM1+1

你可能感兴趣的:(学习小计,数论)