問題引發
網友計算1的9999999次方,不到1s就得出答案。那python是如何處理的?
>>> a=1 >>> i=a**9999999 >>> print(i) 1
問題解答
求解形如a^n的值,可以使用快速冪算法,只需要O(logn)次乘法運算。每次乘法運算的時間是與數的位數的平方成正比。
計算1^n無需考慮乘法運算的時間,所以總共只需要O(logn)的時間,幾乎不需要時間。
而計算2^n需要考慮乘法運算的時間,數的位數是O(n)級別的,所以總共需要O(n^2logn)的時間。不過實際每次乘法的時候數的位數要比n小很多,所以實際運行時間還是比較快的。