Description 一个数列定义如下:f(1)=1,f(2)=1,f(n)=(A*f(n-1)+B*f(n-2))mod
7。给定A,B和n的值,要求计算f(n)的值。 Input 输入文件(sequence.in)仅一行包含3个整数A,B和n,其中(1≤
A, B ≤1000, 1 ≤n≤100,000,000)。 Output
输出文件(sequence.out)仅一行,一个整数,即f(n)的值。
矩阵乘法快速幂模板题。
#include<cstdio>
#include<cstring>
struct jz
{
int a[3][3];
jz operator * (const jz & jjj) const
{
int i,j,k;
jz ans;
memset(ans.a,0,sizeof(ans.a));
for (i=1;i<3;i++)
for (j=1;j<3;j++)
for (k=1;k<3;k++)
ans.a[i][j]=(ans.a[i][j]+a[i][k]*jjj.a[k][j])%7;
return ans;
}
}now,ans;
int main()
{
int i,j,k,m,n,p,q,x,y,z;
scanf("%d%d%d",&x,&y,&n);
ans.a[1][1]=ans.a[1][2]=1;
n-=2;
now.a[1][1]=x;
now.a[1][2]=1;
now.a[2][1]=y;
while (n)
{
if (n&1) ans=ans*now;
now=now*now;
n>>=1;
}
printf("%d\n",ans.a[1][1]);
}