快速幂
例 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; }

浙公网安备 33010602011771号