为什么 ** % 不等于 pow()?

时间:2021-05-06 23:57:41

标签: python python-3.x math

我正在用一些非常大的整数做数学运算。

a = 31996668987763407681122759688456544309672343150929660388579183552361635866801156544232571947743874725979555497520523522346401055454482083604132068875682407856840777680593298408744110565645330171439181217418003690336265057898770006993262504197730133462633746536775133255794409751405563787960359702382804112171
b = 39968994684638711836407811558710897608154894441192087061775791249778058326081126973380030666547998821808510867638001640200591424558526984429037057968138897066811746967227206925805583433142576048672441996779241452541173593726000243556949694666514411183712602623210008357435625692818212348302989308982968351093
c = 3
d = 147872003727713417434649045868124227470358241161885989151697119747919639511713324111730603260513079593711814002873476888445112729255355342390940137327249579433589085077949825049858146087889814189447823045724364491938625398705217973625992967711785074731810147958544135244184552999399993914543567731757595617769

然后

result = a * (b ** c) % d
assert result == a * pow(b, c, d)

抛出一个断言错误。

它们为什么不同?
哪一个是正确的?

2 个答案:

答案 0 :(得分:8)

您需要添加一些括号:

result = a * ((b ** c) % d)
assert result == a * pow(b, c, d) # this will be True now

答案 1 :(得分:0)

  1. 结果 == a * pow(b, c, d)
    #如果条件返回True,则什么都不发生:
    #if 条件返回 False,引发 AssertionError:

  2. pow(x,y,z)

    • x:基数
    • y:指数数
    • z:可选,模数
  3. 所以,结果,a*((b**c)%b) 会更正