x n的演算法 python

2021-10-09 21:10:58 字數 972 閱讀 2164

參考鏈結@小泡芙吖

三種方法的原理都是一樣的

對於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,定義...