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集合三fail-fast

Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理解决办法)

Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理解决办法)

Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理解决办法)

Git – Fast Forward 和 no fast foward

how fast the boy runs!改成以what 引导的感叹句怎么改