取模小技巧
问题
求 \(\frac a b \bmod m\) 的值。\(b\) 在模 \(m\) 下没有逆元,但是保证 \(a\) 是 \(b\) 的倍数。
结论
\[\boxed{\frac a b \bmod m = \frac {a \bmod (b \times m)} b}
\]
即,先把模数变成 \(b\) 倍,最后要答案的时候直接除以 \(b\) 即可。
证明
设 \(\frac a b = k \times m + r\),其中 \(0 \le r < m\)。
\[\begin{aligned}
\frac a b &= k \times m + r \\
a &= k \times (b \times m) + b \times r \\
a \bmod (b \times m) &= b \times r \\
r &= \frac {a \bmod (b \times m)} b \\
\end{aligned}\]
得证。
例题
P3015 [USACO11FEB] Best Parenthesis S
建出表达式树后,从根节点往下递归,得到一个答案,为最终答案的 \(2\) 倍。而模数是 \(12345678910\),不存在逆元。
因此,将模数设为 \(12345678910 \times 2\) 计算,将得到的答案答案直接除以 \(2\) 即可。
浙公网安备 33010602011771号