码迷,mamicode.com
首页 > 其他好文 > 详细

[快速幂]1

时间:2019-09-29 21:34:18      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:思想   mat   最快   span   include   快速   scanf   return   base   

引入:

  • 普通幂运算:
    \(a^b\) 及连续乘以\(b\)\(a\).

    显然,效率很TM

  • 首先,我们要知道,
    \(x^y=x^ {y_1+y_2+...+y_n }\)
    例如,当\(b=11\)时,
    位权时最大的基本单位,他们可以拼成一定范围内的所有数,故二进制拆分是最快的,多重背包的优化也是这种思想。
    \(b\)拆成2进制,则\(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;
} 

[快速幂]1

标签:思想   mat   最快   span   include   快速   scanf   return   base   

原文地址:https://www.cnblogs.com/defense/p/11609905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!