mod ライブラリで素数以外の法に関してできることを書きます.

制限なくできること

  • 加算
  • 減算
  • 乗算

これらは,単に整数として演算した後に法で割って余りを求める (あるいはそれと同値なことをする) だけだから,できる.

除算

$\bmod M$ における $a/b$ というのは, 「$b$ にかけたら $a$ になる数」である.

できる場合

$(b, M) = 1$ ならば,一意に存在する.

  • (存在)$\quad$ $bu + Mv = 1$ となる $u, v$ がとれるので,$x = au$ とすればよい.
  • (一意性)$\quad$ $bx \equiv bx’ \equiv a$ ならば, $b(x - x’) \equiv 0$ だから,$x \equiv x’$となる.

特に $M$ が素数ならば, $b\not\equiv 0 \pmod M$ のとき,一意に存在する.

できない場合

$(b, M) \neq 1$ のときは,存在しないかもしれないし,複数あるかもしれない.

  • $2x \equiv 3 \pmod 4$ となる $x$ は存在しない.
  • $2x \equiv 2 \pmod 4$ となる $x$ は, $x = 1$, $x = 3$ の2つがある.

mod ライブラリでは,$(b, M) \neq 1$ の時に $a/b$ を実行すると, 実行時エラーにしている.

割り切れる除算

$a/b$ が整数になるとわかっている場合,$a/b \bmod M$ を求めるのに, $r := a\bmod bM$ を求めるという方法がある. $a = bMu + r$ とすると,$a/b = Mu + r/b$ であるから, $r/b$ は整数になるはずなので,普通に整数で割り算をすれば良い. $bM$ が大きな数になる可能性があって,int128 などが必要になるかもしれない.

例題: ABC293-E (この方法による解説 )