參考鏈結@小泡芙吖
三種方法的原理都是一樣的對於n,先將其換成二進位制形式,在這裡舉個例子,假設n=11,其二進位制形式是1011
從左邊數的第二位開始,若等於0,則對x進行平方,若為1,則先對當前結果進行平方,再乘上x。
# 11 -> 1011
# x^11=(((x)^2)^2*x)^2*2
def do(x, n):
b =
res = 1
while n > 0:
n //= 2
for i in range(len(b), 0, -1):
if b[i - 1]:
res = res * res * x
else:
res = res * res
return res
# 11 -> 1011
# x^11=x^1*x^2*x^8
def do(x, n):
res = 1
tmp = x
while n > 0:
if n % 2:
res *= tmp
tmp = tmp * tmp
n = n // 2
return res
# 遞迴法
# x^n可以分成三種情況
# 1.x,n=1;
# 2.x^(n/2),n>1,n%2=1;
# 3.x^(n/2),n>1,n%2=0;
def rec(x, n):
if n == 1:
return x
y = rec(x, n // 2)
if n % 2:
return y * y * x
else:
return y * y
c 語言 樸素演算法與分治演算法計算X n
樸素演算法 不詳細講了,就是先算x乘x,算完結果在乘x,直到n個x相乘 分治演算法 看圖比較方便 如圖 演算法先將x n分開,分到不能再分為止 分的時候是呼叫自身函式 程式執行時也是如此,當不能再分時開始和從下往上和,例如3 6,先算sum 3 3 3,再算sum sum sum 即sum 3 3 ...
python的演算法
所謂 水仙花數 是指乙個三位數,其各位數字立方和等於該數本身。例如 153是乙個 水仙花數 因為153 1的三次方 5的三次方 3的三次方。for n in range 100,1000 i n 100 j n 10 10 k n 10 if n i 3 j 3 k 3 print n 氣泡排序 l...
Python 的MRO演算法
mro method resolution order 方法解析順序 作用 在python中用於處理二義性問題的演算法 python支援多繼承,多繼承的語言往往會遇到兩類二義性的問題 1 有兩個基類a b,a和b都定義了方法f c繼承a和b,呢麼呼叫c的f 方法是會出現不確定 2 有乙個基類a,定義...