快速幂

  例     a11=a(2^0+2^1+2^3)

11的二进制是1011,11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1,因此,我们将a¹¹转化为算 a2^0*a2^1*a2^3,也就是a1*a2*a8 ,看出来快的多了吧原来算11次,现在算三次。

快速幂的时间复杂度log(n)。

快速幂代码:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string>
#include<string.h>
#define ll long long
#define mod 1e7+7
using namespace std;
int  mat_pow(int  x,int y){
    int  ans=1,base=x;
    while(y!=0){
        if(y&1!=0){
            ans*=base;
        }
        base*=base;
        y>>=1;
    }
    return ans;
}
int main(){
    int  x,y;
    while(scanf("%d%d",&x,&y)){
        cout<<mat_pow(x,y)<<endl;;
    }
    return 0;
}

 

posted @ 2017-11-17 16:32  ISGuXing  阅读(146)  评论(0)    收藏  举报