重現我如何相信這一點的步驟:
>>> 2 ** 4324567
如果您厭倦了等待,鍵盤會中斷上述操作,因為比較操作需要不到一秒鐘,而上面需要 20 秒。
>>> 2 ** 4324567 % 55
您會注意到使用模數運算的方法要快得多。唯一可能的方法是它是否使用類似中國剩余定理的東西,對嗎?
奇怪的是,如果指數(即 2 的冪)是一個計算值(例如2 * 2162283或ewhere e = 2 * 2162283),它似乎不會這樣做。有人可以解釋這里發生了什么嗎?
uj5u.com熱心網友回復:
在這里做冪的時間:
>>> 2 ** 4324567
實際上很簡短,您可以通過執行以下操作來驗證,例如,
>>> x = 2 ** 4324567
反而。原始檔案中的大部分時間實際上是通過將內部 400 萬 位二進制整數轉換為十進制字串進行顯示來消耗的。
這太貴了。在基數 2 和基數 10 表示之間的轉換通常需要在位數(或位數)上進行二次時間。
這也是為什么帶有模數運算的那個看起來更快:只有 2 個十進制數字要顯示。那進展得很快。
但是,如果您要進行模冪運算,請改用 3 引數版本pow()。這比先計算一個巨大的冪然后再進行模運算要高效得多。
uj5u.com熱心網友回復:
中國剩余定理在這里不用,在這里也沒有用。如果要進行模冪運算,請使用 3-argument pow: pow(2, 4324567, 55)。
第二行運行得更快,因為第一行中幾乎所有的作業實際上都是在構造結果的字串表示,而不是執行求冪。第二行產生一個小得多的數字,可以更快地進行字串化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/343363.html
上一篇:Sql查詢中的四舍五入數字整數
