代码之家  ›  专栏  ›  技术社区  ›  Cobra_Fast

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

  •  0
  • Cobra_Fast  · 技术社区  · 5 年前

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

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

    那么

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

    抛出断言错误。


    哪一个是正确的?

    2 回复  |  直到 5 年前
        1
  •  7
  •   charles    5 年前

    您需要添加一些括号:

    result = a * ((b ** c) % d)
    assert result == a * pow(b, c, d) # this will be True now
    
        2
  •  0
  •   top talent    5 年前

    1. #如果条件返回True,则不会发生任何事情:
      #如果条件返回False,则引发AssertionError:

    2. 功率(x,y,z)

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