Secuencia de Peppolac III (no terminada)

Secuencia de Fibonacci III

Descripción

Encuentre el enésimo término de la secuencia f [n] = f [n-1] + f [n-2] +1. F [1] = 1, f [2] = 1.

Entrada

norte (1 < norte < 2 ^ 31-1)

Salida

El resultado del artículo N mod 9973

Entrada de muestra

12345
Salida de muestra

8932

Ideas para resolver problemas

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Código

#include<cstdio>
using namespace std;
long long n,k;
struct node
{
    
    
	long long n,m;
	long long oo[5][5];
}a,b,c;
node operator*(node x,node y)
{
    
    
	node z;
	for(long long i=1;i<=x.n;i++)
	 for(long long j=1;j<=y.n;j++)
	  z.oo[i][j]=0;
	for(long long o=1;o<=x.m;o++)  
	 for(long long i=1;i<=x.n;i++)
	  for(long long j=1;j<=y.n;j++)
	   z.oo[i][j]=(z.oo[i][j]+x.oo[i][o]*y.oo[o][j])%9973;
	return z;
}
void ksm(long long k)
{
    
    
	if (k==1)
	{
    
    
		c=a;
		return;
	}
	ksm(k/2);
	c=c*c;
	if (k&1) c=c*a;
}
int main()
{
    
    
	scanf("%lld",&n);
	a.n=a.m=3;
	a.oo[1][2]=a.oo[2][1]=a.oo[2][2]=a.oo[3][2]=a.oo[3][3]=1;
	ksm(n-1);
	b.n=1;
	b.m=3;
	b.oo[1][1]=b.oo[1][2]=b.oo[1][3]=1;
	b=b*c;
	printf("%lld",b.oo[1][1]);
	return 0;
}


Gracias

Supongo que te gusta

Origin blog.csdn.net/weixin_45524309/article/details/111073141
Recomendado
Clasificación