快速幂模板(Python)
生活随笔
收集整理的這篇文章主要介紹了
快速幂模板(Python)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先我們需要知道下面這個公式:
(a^b) mod c=((a mod c)^b) mod c
現在試著用最常規的方法計算 a^b
算法一:
def spow(n, m):res = 1for i in range (m):res *= nreturn res print(spow(2, 100))顯然這個算法的時間復雜度為 O(n),我們需要找到一個復雜度較低的算法。
對于冪次運算,例如a^5
如果直接運算,需要5次循環了。
但是如果寫成 a^5 = a*((a2)2),如果是這樣,就僅僅需要3次運算了,一下子省了兩次運算,對于這次次數低的運算都如此可觀,對于次數多的運算可想而知了。
對于上面的情況,計算冪的時候,明顯需要分情況考慮。
1、當b為偶數的時候,a^b = (a2)(b/2);
2、當b為奇數的時候,a^b = a*(a^2)((b-1)/2)。
時間復雜度降到了 O(logn)
算法二:
def qpow(n, m):res = 1base = nwhile m != 0:if (m&1) != 0:res = res*basebase = base*basem = m >> 1return res print(qpow(2, 100))如果要取余
算法三:
mod = 1000000007 def qpow(n, m):res = 1base = nwhile m != 0:if (m&1) != 0:res = res*base%modbase = base*base%modm = m >> 1return res print(qpow(2, 100))總結
以上是生活随笔為你收集整理的快速幂模板(Python)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyecharts 绘制地图
- 下一篇: linux的基础知识——网络套接字函数