解题思路
给了一种新的斐波那契数列的求解思路,需要对一个矩阵连乘,可以类推数的 快速幂 来进行求解
代码
#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;
}