分析
做这题之前,要先背诵过模的运算法则。模运算在对两个数的加、减、乘、指数进行运算时,符合如下规律:
- (A + B) mod C = (A mod C + B mod C) mod C
- (A - B) mod C = (A mod C - B mod C) mod C
- (A * B) mod C = (A mod C * B mod C) mod C
- A^B mod C = ( (A mod C)^B ) mod C
如何背诵这些法则?观察公式可知,可以按交换律的思路来背诵。将模运算提到四则运算内,并对结果取模。
本文主要用到的是第3条法则。第四条法则看似有用,能用于计算指数运算的模结果,但为了防止溢出,优化的解答会用快速幂的思路来完成指数运算。
公式都参考 https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/modular-multiplication
左栏可以查看加、减、乘、指数下的模运算结果
python的模运算 提到了pow的用法:
内置的 pow() 方法
pow(x, y[, z])
函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于 pow(x,y) %z。
参考宫水三叶的题解,该题主要是将超级次方分解为如下两个相乘。
比如,对于 a 2314 a^{2314} a2314,可分解为如下:
a 1234 = ( a 123 ) 10 ∗ a 4 a^{1234} = (a^{123})^{10} * a^4 a1234=