Fast Power
Posted xxrll
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fast Power相关的知识,希望对你有一定的参考价值。
整数:求a^n,把n化为2*(k1+k2+..+km);
矩阵:注意矩阵乘法。
复杂度:O(logn)
tip:取了模(根据题目要求)
1 #include<bits/stdc++.h> 2 #define mem(a) memset(a,0,sizeof(a)) 3 #define ll long long 4 using namespace std; 5 ll mod=1e9; 6 ll quickpow(ll a,ll n) 7 ll ans=1; 8 while(n) 9 if(n&1) 10 ans=(ans*a)%mod; //取模 11 n>>=1; 12 a=(a*a)%mod; 13 14 return ans%mod; 15 16 int main() 17 cout<<quickpow(2,19); 18 return 0; 19
1 #include<bits/stdc++.h> 2 #define mem(a) memset(a,0,sizeof(a)) 3 #define ll long long 4 const int N=1e6+5; 5 using namespace std; 6 ll mod=1e9; 7 struct matrix 8 int m[N][N]; 9 ; 10 matrix mat_multi(matrix a, matrix b) 11 matrix ans; 12 for(int i=0;i<N;i++) 13 for(int j=0;j<N;j++) 14 ans.m[i][j]=0; 15 for(int k=0;k<N;k++) 16 ans.m[i][j]+=(a.m[i][k]%mod*b.m[k][j]%mod)%mod; 17 ans.m[i][j]%=mod; 18 19 20 21 return ans; 22 23 matrix quickpow(matrix a,ll n) 24 matrix ans; 25 for(int i=0;i<N;i++) 26 for(int j=0;j<N;j++) 27 if(i==j) ans.m[i][j]=1; 28 else ans.m[i][j]=0; 29 //初始化为单位矩阵,类比整型时的1;单位矩阵*矩阵A=矩阵A 30 31 32 while(n!=0) 33 if(n&1) 34 ans=mat_multi(a,ans); 35 n>>=1; 36 a=mat_multi(a,a); 37 38 return ans; 39
以上是关于Fast Power的主要内容,如果未能解决你的问题,请参考以下文章
Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理解决办法)
Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理解决办法)
Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理解决办法)