#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
struct matrix{
int a[101][101];
int x;
void out()
{
for(int i=1;i<=x;i++)
{
for(int j=1;j<=x;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
}
};
matrix m1;
int n;
matrix operator * (matrix const& x,matrix const& y)
{
int mod=1e9+7;
matrix res;
res.x=x.x;
for(int i=1;i<=x.x;i++)
for(int j=1;j<=x.x;j++)
for(int l=1;l<=x.x;l++)
res.a[i][j]=(res.a[i][j]+(x.a[i][l]*y.a[l][j]))%mod;
return res;
}
void make_m1(matrix& x,int y)
{
x.x=y;
for(int i=1;i<=x.x;i++)
x.a[i][i]=1;
}
matrix matrix_pow(matrix x,int y)
{
if(y==0) return m1;
if(y&1) return matrix_pow(x,y-1)*x;
matrix t=matrix_pow(x,y/2);
return t*t;
}
int fib(int x)
{
matrix mtrx=(matrix){{{},{0,1,1},{0,1}},2};
matrix aab=matrix_pow(mtrx,x);
return aab.a[1][2];
}
signed main()
{
make_m1(m1,2);
while(cin>>n)
cout<<fib(n)<<' ';
return 0;
}
- 这个程序在洛谷上可以通过这道题目,洛谷IDE也没问题,但是本地输入到 7 就运行错误,这是为什么?(这里只考虑一组数据的情况)
- 就算是洛谷在线IDE,运行多组测试数据,也会出现答案错误的情况(比如
1 1程序会输出1 2),这又是为什么?