關於快速冪

快速冪
這個先上Code吧spa

int power(int x, int y) {
    int sum = 1;
    while(y) {
        if(y & 1) sum *= x;
        x *= x;
        y >>= 1;
    }
    return sum;
}

衆所周知\(p^a * p^b=p^{a+b}\)
咱們如今須要求\(x^y\)
舉個栗子,咱們求\(3^5\)
咱們把\(5\)拆成二進制\(101\)
能夠發現正正好的在二進制下的位數只要是\(1\)的乘起來就是答案
emmmm,可能我說的不是特別的嚴密
就是\(3^5=3^{1*2^0+0*2^1+1*2^2}\)
把有\(0\)的一項直接去掉
\(3^5=3^{1*2^0+1*2^2}\)
也就是\(3^{2^0} * 3^{2^2}\)
\(3\)每次自乘能夠獲得\(3^1,3^2,3^4,3^8......\)
因此求3的幾回方是幾就不是問題了
只要是在二進制下是1的咱們就累計答案讓
通常題目是要取膜的由於指數級別增加數會很是大code

沒了,講完了
謝謝收看,祝身體健康!class

相關文章
相關標籤/搜索