斐波那契数列 矩阵快速幂+矩阵加速

请你求出斐波那契数列 F n   m o d   1 0 9 + 7 F_n mod 10^9+7 Fnmod 109+7的值,其中 1 ≤ n < 2 63 1≤n<2^{63} 1n<263
n在long long范围内,线性无法解决,所以使用矩阵加速。

#include
using namespace std;
struct matrix
{
	long long ans[3][3];
	long long size;
}base;
long long n,Mod=1000000007;
matrix operator*(const matrix &x,const matrix &y) {
	matrix temp;
	for(int i=1;i<=2;i++)
	for(int j=1;j<=2;j++)temp.ans[i][j]=0;
	
	for(int i=1;i<=2;i++)
	for(int j=1;j<=2;j++)
	for(int k=1;k<=2;k++)
	temp.ans[i][j]=(temp.ans[i][j]+x.ans[i][k]*y.ans[k][j]%Mod)%Mod;
	return temp;
}
matrix qpow(long long p,matrix base)
{
	p--;
	matrix temp=base;
	while(p>0)
	{
		if(p%2==1)temp=temp*base;
		base=base*base;
		p=p/2;
	}
	return temp;
}
int main()
{
	cin>>n;
	base.ans[1][1]=1;base.ans[1][2]=1; 
	base.ans[2][1]=1;base.ans[2][2]=0; 
	if(n<=2)cout<<1<<endl;
	else 
	{
		matrix t=qpow(n,base);
		cout<<t.ans[2][1]<<endl;
	}
	return 0;
}

你可能感兴趣的:(矩阵,算法,线性代数)