快速幂运算 《挑战程序设计竞赛》
生活随笔
收集整理的這篇文章主要介紹了
快速幂运算 《挑战程序设计竞赛》
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2018-3-1
這里我就對數進行說明,并沒有對矩陣進行求解。
求x^n,其中n是一個比較大的數如果用一般的方法的話,我們會直接進行累乘即可,時間復雜度是O(n),但是這個好像并不能滿足我們的要求,我們來分析一下:n的二進制表示是這樣的,
n=t1*2^k1+t2*2^k2+t3*2^k3…,其中k1,k2,k3…為0,1,2…,t1,t2…只能是0或者1,附上代碼:
我們依次判斷n的二進制表示的每一位的值,如果是0的話,r不做任何操作,反之,如果是1的話,那么當前的值要乘上x,有人可能會問,這里的x是個什么東西,x每一次都要乘上它本身。比如說n=10110,那么從左到右依次為:n=1*2^4+0*2^3+1*2^2+1*2^1+0*2^0,那么第i次循環前,x就為x^(2^(i-1)),那么當第i位為1時,就表示r的值要乘x^(2^(i-1))。
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的快速幂运算 《挑战程序设计竞赛》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: The Constructor with
- 下一篇: 56 - I. 数组中数字出现的次数