您的位置:首页 > 其它

POJ3070 - Fibonacci (矩阵快速幂)

2015-08-26 17:20 351 查看
题目链接:POJ3070 - Fibonacci


解题思路

代码

解题思路

给了一种新的斐波那契数列的求解思路,需要对一个矩阵连乘,可以类推数的 快速幂 来进行求解

代码

#include <iostream>

using namespace std;
const int mod = 10000;

struct matrix
{
int data[2][2];
matrix operator*(matrix & rhs)
{
matrix temp;
for(int i=0; i<2; i++)
{
for(int j=0; j<2; j++)
temp.data[i][j] = ( data[i][0]*rhs.data[0][j] + data[i][1]*rhs.data[1][j] ) % mod;
}
return temp;
}
};

int solve(int n)
{
matrix re;
for(int i=0; i<2; i++)
for(int j=0; j<2; j++) re.data[i][j] = (i==j);
matrix base;
for(int i=0; i<2; i++)
for(int j=0; j<2; j++) base.data[i][j] = 1;
base.data[1][1] = 0;

while(n)
{
if(n&1) re = re * base;
base = base * base;
n >>= 1;
}
return re.data[0][1];
}

int main()
{
int n;
while(cin>>n && n!=-1)
{
cout<<solve(n)<<"\n";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: