- [递推关系的建立]
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;
const int N = 2;
struct ma{
ll a[N][N];
void init()// 初始化为单位矩阵
{
memset(a,0,sizeof a);
for(int i=0;i<N;i++) a[i][i] = 1;
}
};
ma mul(ma a,ma b)// 矩阵相乘
{
ma ans;
for(int i=0; i<N; i++)// N:第一个矩阵的行
{
for(int j=0; j<N; j++)// N:第二个矩阵的列
{
ll s = 0;
for(int k=0; k<N; k++) // N:第二个矩阵的列
{
s = ( s + a.a[i][k]*b.a[k][j]%mod )%mod;
}
ans.a[i][j] = s;
}
}
return ans;
}
ma qpow(ma aa,ll bb)// 矩阵快速幂
{
ma ans;
ans.init();
while( bb )
{
if( bb&1 ) ans = mul(ans,aa);
aa = mul(aa,aa);
bb >>= 1;
}
return ans;
}
int main()
{
int n;
while( cin>>n )
{
ma a;
a.a[0][0] = a.a[0][1] = a.a[1][0] = 1;
a.a[1][1] = 0;
ma ans = qpow(a,n);
cout<<ans.a[0][0]<<" "<<ans.a[0][1]<<"
";
cout<<ans.a[1][0]<<" "<<ans.a[1][1]<<"
";
}
/*
很容易就可以发现当f[1] = f[2] = 1;
ans.a[0][0] = f[n+1]
ans.a[0][1] = f[n]
*/
}