数列第n项

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <string.h>
long long n,a[2],b[2][2]={0,4,1,3},mod=1e9+7;
void Matrix1(long long x[2],long long y[2][2])
{
	long long c[2];
	memset(c,0,sizeof(c));
	for(int j=0;j<2;j++)
		{
			for(int k=0;k<2;k++)
			{
				c[j]=(c[j]+(x[k]%mod*y[k][j]%mod))%mod;
			}
		}
	for(int i=0;i<2;i++)
	{
			x[i]=c[i]%mod;
	}
}
void Matrix2(long long x[2][2],long long y[2][2])
{
	long long c[2][2];
	memset(c,0,sizeof(c));
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<2;j++)
		{
			for(int k=0;k<2;k++)
			{
				c[i][j]=(c[i][j]+(x[i][k]%mod)*(y[k][j]%mod))%mod;
			}
		}
	}
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<2;j++)
		{
			x[i][j]=c[i][j]%mod;
		}
	}
}
int main()
{
	scanf("%lld%lld%lld",&n,&a[0],&a[1]);
	n--;
	while(n)
	{
		if(n&1)	Matrix1(a,b);
		Matrix2(b,b);
		n>>=1;
	}
	printf("%lld",a[0]);
	return 0;
 } 
发布了31 篇原创文章 · 获赞 11 · 访问量 2564

猜你喜欢

转载自blog.csdn.net/guyjy/article/details/105255589