首先是回答:当 pow 被传递了三个参数,分别是底数 base ,指数 exp 和模值 mod ,并且第二个参数(指数)为负时,进行的计算较为特殊:计算结果为 base 在模 mod 意义下的一个乘法逆元的 -exp 次幂对 mod 取模。
根据这个计算方式,我们看到 8 在模 5 意义下的一个乘法逆元是 2 ,即 (8 * 2) % 5 == 1 ,则函数返回 pow(2, 2, 5)=4 。
其次是如何解决:首先应该查看帮助信息, python 的帮助信息比较容易获得,在交互式命令行输入(对此例) help(pow) 即可获取。当然从您的问题描述可以看到您应该已经查看了相关的信息,但是发现似乎行为和信息并不一致,故有此问题。在查看帮助信息的基础上进一步解决通过前往 Python 官网查看文档,其中给出了更详细的说明,从这里即可看到与上述内容相同的计算规则,复制如下:
For int operands base and exp, if mod is present, mod must also be of integer type and mod must be nonzero. If mod is present and exp is negative, base must be relatively prime to mod. In that case, pow(inv_base, -exp, mod) is returned, where inv_base is an inverse to base modulo mod.
可见 help 给出的信息可能并不充裕,在之后遇到无法理解的内置方法或函数的行为时可以首先考虑进一步查阅文档。文档是非常重要且有意义的工具。