[クイックパワー] 1

はじめに:

  • 共通の累乗:
    \(A ^ B \)と連続した乗算\(B \)\(A \)

    明らかに、効率非常TM低いです

  • まず、我々は知っている必要があり、
    \(Y = X ^ X ^ {Y_1 + + ... + y_nのY_2} \)
    例えば、\(B = 11 \)
    最大一時ベース・ユニットの位置、それらが綴られなければなりません範囲内のすべての数は、それが最速と複数のバックパックを最適化もこのアイデアですされたバイナリ分割です。\(Bの\)は 2 229に分割\(B =(1011)_2 =(1×2 ^ 3 + 0×2 ^ 2 + 1×2 ^ 1 + 1×2 ^ 0)_ {10 } \)ので\(A ^ B = A ^ {2 ^ 3 + 2 + 1} \) コード:


#include<cstdio>
inline int quick_pow(int A , int B){
    int base = A, ans = 1;
    while(B){
        if(B & 1){//取B的末尾进行算位权
            ans *= base;
        }
        base *= base;//及base=base^2,因为每次次数要按位加一
        B >>= 1;//去掉一位
    }
    return  ans;
}  
int main(){
    int a , b;
    scanf("%d%d",&a , &b);
    printf("%d",quick_pow(a , b));
    return 0;
} 

おすすめ

転載: www.cnblogs.com/defense/p/11609905.html
おすすめ