POJ 3070 Fibonacci(矩阵快速幂)

题目链接

题意 : 用矩阵相乘求斐波那契数的后四位。

思路 :基本上纯矩阵快速幂。

 //
#include <iostream>
#include <cstring>
#include <cstdio> using namespace std; struct Matrix
{
int v[][];
};
int n; Matrix matrix_mul(Matrix a,Matrix b)
{
Matrix c;
for(int i = ; i < ; i++)
{
for(int j = ; j < ; j++)
{
c.v[i][j] = ;
for(int k = ; k < ; k++)
c.v[i][j]=(c.v[i][j]+a.v[i][k]*b.v[k][j])%;
}
}
return c;
} int matrix_mi()
{
Matrix p,t ;
p.v[][] = p.v[][] = p.v[][] = ;
p.v[][] = ;
t.v[][] = t.v[][] = ;//t是单位向量
t.v[][] = t.v[][] = ;
while(n)
{
if(n&)//奇数
t = matrix_mul(t,p);
n = n>> ;
p = matrix_mul(p,p);
}
return t.v[][] ;
}
int main()
{
while(scanf("%d",&n)!=EOF&&n!=-)
{
if(n == || n == )
{
cout<<n<<endl;
continue;
}
int ans = matrix_mi();
cout<<ans<<endl;
}
return ;
}
上一篇:[国嵌笔记][028][Bootloader设计蓝图]


下一篇:Struts2(十一)OGNL标签三与Struts2标签