【SSL 1531】斐波那契数列IV【矩阵乘法】

斐波拉契数列IV

T i m e L i m i t : 1000 M S Time Limit:1000MS TimeLimit:1000MS
M e m o r y L i m i t : 65536 K Memory Limit:65536K MemoryLimit:65536K

Description

求数列 f [ n ] = f [ n − 2 ] + f [ n − 1 ] + n + 1 f[n]=f[n-2]+f[n-1]+n+1 f[n]=f[n2]+f[n1]+n+1的第 N N N项,其中 f [ 1 ] = 1 , f [ 2 ] = 1 f[1]=1,f[2]=1 f[1]=1,f[2]=1.

Input

N ( 1 < N < 2 31 − 1 ) N(1<N<2^{31-1}) N(2311)

Output

n n n项结果 m o d mod mod 9973 9973 9973

Sample Input

10000

Sample Output

4399

分析:

矩阵乘法即可
可移步至这里这里玩玩呀
还是 与其他变式类似 考虑 [ f n − 2 , f n − 1 , n , 1 ] [f_{n-2},f_{n-1},n,1] [fn2,fn1,n,1]
乘上某矩阵后 [ f n − 1 , f n , n , 1 ] [f_{n-1},f_n,n,1] [fn1,fn,n,1] 变为
[ f n − 1 , f n − 2 + f n − 1 , n + 1 , 1 ] [f_{n-1},f_{n-2}+f_{n-1},n+1,1] [fn1,fn2+fn1,n+1,1]
不难得出 该矩阵为:
0 , 1 , 0 , 0 0,1,0,0 0,1,0,0

1 , 1 , 0 , 0 1,1,0,0 1,1,0,0

0 , 1 , 1 , 0 0,1,1,0 0,1,1,0

0 , 1 , 1 , 1 0,1,1,1 0,1,1,1
设的矩阵初始状态为 [ 1 , 1 , 3 , 1 ] [1,1,3,1] [1,1,3,1] 因为 n n n是从第 3 3 3项开始

CODE:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int mod=9973;
int n;
struct matrix{
    
    
	int n,m;
	long long F[11][11];
}A,B,C;
matrix operator *(matrix x,matrix y)
{
    
    
	matrix AwA;
	AwA.n=x.n;AwA.m=y.m;
	for(int i=1;i<=AwA.n;i++)
		for(int j=1;j<=AwA.m;j++)
			AwA.F[i][j]=0;
	for(int k=1;k<=x.m;k++)
		for(int i=1;i<=x.n;i++)
			for(int j=1;j<=y.m;j++)
				AwA.F[i][j]=(AwA.F[i][j]+x.F[i][k]*y.F[k][j]%mod)%mod;  //矩阵乘
	return AwA; 
}
void ksm(int x){
    
    
	if(x==1){
    
    
		B=A;
		return;
	}
	ksm(x/2);
	B=B*B;  //快速幂
	if(x&1) B=B*A;
}
int main(){
    
    
	scanf("%d",&n);
	A.n=4;A.m=4;
	A.F[1][1]=0;A.F[1][2]=1;A.F[1][3]=0;A.F[1][4]=0;
	A.F[2][1]=1;A.F[2][2]=1;A.F[2][3]=0;A.F[2][4]=0;  //乘的矩阵A
	A.F[3][1]=0;A.F[3][2]=1;A.F[3][3]=1;A.F[3][4]=0;
	A.F[4][1]=0;A.F[4][2]=1;A.F[4][3]=1;A.F[4][4]=1;
	if(n<=2){
    
    
		printf("1");
		return 0;
	}else{
    
    
		C.n=1;C.m=4;
		C.F[1][1]=1;C.F[1][2]=1;C.F[1][3]=3;C.F[1][4]=1;  //初始矩阵
		ksm(n-1);
		C=C*B;
		printf("%d",C.F[1][1]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/dgssl_xhy/article/details/111062345