【例题】
uva 10229 Modular Fibonacci
矩阵快速幂求斐波那契数列板子题。
规律:fib数列对2^m取模的循环节为3*(2^(m-1)).
【代码一】
#include<bits/stdc++.h>
using namespace std;
int fib[22][2000000];
int main()
{
int m,n;
for(int i=1;i<=20;i++){
fib[i][0]=0;
fib[i][1]=1;
int k=1<<i;
for(int j=2;j<3*(1<<i-1);j++)
fib[i][j]=((fib[i][j-1])%k+(fib[i][j-2])%k)%k;
}
while(scanf("%d%d",&n,&m)==2){
if(!m) printf("0\n");
else printf("%d\n",fib[m][n%(3*(1<<m-1))]);
}
return 0;
}
【代码二】
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m;
struct mat{
ll a[2][2];
};
mat mat_mul(mat x,mat y){
mat res;
memset(res.a,0,sizeof(