从昨天晚上开始学矩阵乘。。。。
今天早晨突然发现这个题其实10行的暴力可以过。。。
今天下午矩阵乘法彻底包装到了结构里。。以后大概矩阵都是这样写吧。。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define mod 7
#define MAX 90
using namespace std;
int A,B,n;
struct wbysr_matrix
{
int n,m;
int a[MAX][MAX];
inline void init(int tn,int tm)
{
n=tn;
m=tm;
for(int i=0;i<=n;i++)
for(int j=0;j<=m;j++)
a[i][j]=0;
}
void print()
{
for(int i=1;i<=n;i++,printf("\n"))
for(int j=1;j<=m;j++)
printf("%d ",a[i][j]);
}
}e,w;
inline wbysr_matrix operator *(const wbysr_matrix &a,const wbysr_matrix &b)
{
if(a.m!=b.n)
return a;
wbysr_matrix c;
c.init(a.n,b.m);
for(int i=1;i<=a.n;i++)
for(int j=1;j<=b.m;j++)
for(int k=1;k<=a.m;k++)
c.a[i][j]+=(a.a[i][k]*b.a[k][j])%7;
return c;
}
inline wbysr_matrix pow(wbysr_matrix &a,int x)
{
if(x==1)
return a;
wbysr_matrix b=pow(a,x>>1);
b=b*b;
if(x%2)
b=a*b;
return b;
}
int main()
{
scanf("%d%d %d",&A,&B,&n);
e.init(2,1);
e.a[1][1]=e.a[2][1]=1;
w.init(2,2);
w.a[1][1]=0;
w.a[1][2]=1;
w.a[2][1]=B;
w.a[2][2]=A;
wbysr_matrix now;
now.init(2,1);
now=pow(w,n-1)*e;
printf("%d\n",now.a[1][1]%7);
return 0;
}