[板子]快速幂&矩阵快速幂

不会的来这看:https://www.cnblogs.com/CXCXCXC/p/4641812.html

简单的一说:当转换为二进制的时候有位运算这种黑科技,&相当于%2判断奇偶性。

x&1==0为偶,x&1==1为奇

&运算通常用于二进制取位操作,例如一个数 & 1 的结果就是取二进制的最末位。还可以判断奇偶x&1==0为偶,x&1==1为奇

只有在奇数情况的时候把base乘进去,每一次用base*base扩大平方,b的二进制去除一位。

 1 int poww(int a,int b){
 2     int ans=1,base=a;
 3     while(b!=0){
 4         if(b&1==1)
 5           ans*=base;
 6         base*=base;
 7         b>>=1;
 8   }
 9     return ans;
10 }

 接下来是矩阵快速幂。

摘自:blog.csdn.net/wust_zzwh/article/details/52058209

其中c[i][j]为A的第i行与B的第j列对应乘积的和,即:

 

 1 #include<bits/stdc++.h>
 2 
 3 #define LL long long
 4 using namespace std;
 5 
 6 LL n,k;
 7 
 8 const long long pi=1e9+7;
 9 
10 struct ska{
11     LL a[100+10][100+10];
12 }p,pp;
13 
14 ska X(ska x,ska y){
15     ska box;
16     
17     for(LL i=1;i<=n;i++){
18         for(LL j=1;j<=n;j++){
19             box.a[i][j]=0;
20         }
21     }
22     
23     for(LL i=1;i<=n;i++){
24         
25         for(LL j=1;j<=n;j++){
26             
27             for(LL k=1;k<=n;k++){
28                 
29                 box.a[i][j]=(box.a[i][j]+(x.a[i][k]*y.a[k][j])%pi)%pi;
30                 
31             }
32         }
33     }
34     
35     return box;
36 }
37 
38 ska quick_pow(LL kk){
39     
40     ska ans;
41     
42     for(LL i=1;i<=n;i++){
43         ans.a[i][i]=1;
44     }
45    
46     while(kk!=0){
47         
48         if(kk&1==1){
49             
50             ans=X(ans,p);
51         }
52         
53         kk>>=1;
54         
55         p=X(p,p);
56     
57     }
58     
59     return ans;
60 }
61 
62 int main(){
63     scanf("%lld%lld",&n,&k);
64     
65     for(LL i=1;i<=n;i++){
66         
67         for(LL j=1;j<=n;j++){
68             
69             scanf("%lld",&p.a[i][j]);
70             
71         }
72     }
73     
74     pp=quick_pow(k);
75     
76     for(LL i=1;i<=n;i++){
77         
78         for(LL j=1;j<=n;j++){
79             
80             printf("%lld ",pp.a[i][j]);
81             
82         }
83         
84         cout<<endl;
85     }
86     return 0;
87 }

 

posted @ 2017-11-09 14:52  Fylsea  阅读(175)  评论(0编辑  收藏  举报