xn 應該是大家都會算的東西, 而且我們只要求 n 是一個正整數, 那麼最簡單的辦法就是把 x 連續乘 n 遍啦! 當然這種作法所需要的乘法有一點多, 如果是 2.565536 的話, 你只要乘 65536 次就好了;
好一點的作法可以把 n 做一個因式分解的動作, 然後乘法的次數可以降低下來, 上例中, 65536 = 216, 所以我們可以先做 2.52, 然後再做 6.2516, 一下子降低很多乘法次數了吧! 可是要做因式分解耶, 會不會增加更多的運算啊? 會不會太複雜了啊, 還有質數麼辦呢?
下面我們要介紹的平方再乘法是一個很常用的方法, 可以很快地算出一個數的次方, 而且乘法運算的次數在一定的次數以下:
如果你將 n 用二進位表示法表示為
像上面這樣子如果 n 可以用 32 位元表示的話, 最多需要 63 次乘法就可以完成 xn 的運算, 當然你要想想看 x 做那麼多次方的數字是不是已經沒有辦法在計算機內表示了呢?
你可以把 n 連續除以 2 來求出 n 的二進位表示法, 並且用陣列變數來記錄 n 的二進位表示法
也可以直接用 n & (1L << i) 的方式來測試第 i 個位元是否為 1
你應該要先設定一個變數 y 為 1, 寫一個迴圈從 MSB nm-1 開始檢查, 如果發現該位元是 1 時乘上 x, 如果是 0 的話就不要乘任何數, 然後做平方的動作, 然後依序檢查第 m-2 個位元, 第 m-3 個位元, ..... 如此繼續下去直到 n1, 對於 LSB n0 則只要決定是否乘上 x 就可以了。
回
程式設計課程
首頁
製作日期: 99/10/19
by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw