2017年12月22日 星期五

a021: 大數運算-3

a021: 大數運算-3


'''先举个例子,假如希望求 5^62,也就是 5 的 62 次方。
5^62 = 5^(32+16+8+4+2) = 5^32 * 5^16 * 5^8 * 5^4 * 5^2
不管指数是多少,都可以将其分解为 2 的倍数的和,
因为任何整数都能够写成 2 进制的形式
,比如 62 = 00111110B。以上算法中,
随着迭代 n 会变成 x, x^2, x^4, x^8,…,
我们只需要在合适的时候让它和 ans 相乘即可。
合适的时刻就是 N 的二进制表示的相应位上为 1 的时候,
这里使用了右移,只需要判断最低位是不是 1 就好了。'''

def pow(int_x, N):
    ans = 1
    n = int_x
    while (N != 0):
        if (N & 1 == 1):
            ans = ans * n;
        
        n = n * n;
        N >>= 1;
    
    return ans;


print(" a的 b次方 ==> a^b  計算")
X=int(input("輸入 a > "))
Y=int(input("輸入 b > "))

print("a^b = ",pow(X,Y))



================ RESTART: F:/Python_APSC/a021-4.py ===================
 a的 b次方 ==> a^b  計算
輸入 a > 5
輸入 b > 62
a^b =  21684043449710088680149056017398834228515625
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...