Fibonacci PKU logn 求斐波那契的快速方法!!!

时间:2023-03-09 19:37:40
Fibonacci PKU  logn 求斐波那契的快速方法!!!

矩阵的快速幂

#include<cstdio>
using namespace std; struct matrix
{
int m[][]; }ans,base; matrix multi( matrix a,matrix b )//矩阵乘法
{
matrix temp;
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
temp.m[i][j]=;
for(int k=;k<;k++)
temp.m[i][j]=(temp.m[i][j]+a.m[i][k]*b.m[k][j])%;
}
} return temp;
} int fast(matrix a, int n)//矩阵快速幂
{ ans.m[][]=ans.m[][]=;//初始化为单位矩阵
ans.m[][]=ans.m[][]=;
while(n)
{
if(n&)
{
ans=multi(ans,a);
}
a=multi(a,a);
n>>=;
}
return ans.m[][];
} int main()
{
int n;
while(scanf("%d",&n)&&n!=-)
{
base.m[][]=base.m[][]=base.m[][]=;
base.m[][]=; printf("%d\n",fast(base,n)); }
return ;
}