记录编号 282527 评测结果 AAAAAAAAAA
题目名称 数学序列 最终得分 100
用户昵称 GravatarAntiLeaf 是否通过 通过
代码语言 C++ 运行时间 0.009 s
提交时间 2016-07-13 17:04:08 内存使用 0.29 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define ULL unsigned long long
using namespace std;
struct MA{
	ULL a[10][10];
	MA(){
		memset(a,0,sizeof(a));
	}
	void init(ULL k){
		for(ULL i=1;i<=2;i++)a[i][i]=k;
	}
	MA operator*(const MA &x){
		MA c;
		for(int i=1;i<=2;i++)
			for(int j=1;j<=2;j++)
				for(int k=1;k<=2;k++)
					c.a[i][j]=(c.a[i][j]+a[i][k]*x.a[k][j]%7ull)%7ull;
		return c;
	}
	MA operator*=(const MA &x){
		return *this=*this*x;
	}
	MA operator%(ULL x){
		MA c;
		for(int i=1;i<=2;i++)
			for(int j=1;j<=2;j++)
				c.a[i][j]=a[i][j]%x;
		return c;
	}
	MA operator%=(ULL x){
		return *this=*this%x;
	}
}A,B;
MA qpow(MA,ULL,ULL);
ULL n,a,b;
int T;
int main(){
#define MINE
#ifdef MINE
	freopen("number1.in","r",stdin);
	freopen("number1.out","w",stdout);
#endif
	label:
	if(scanf("%llu%llu%llu",&a,&b,&n)!=3)return 0;
	A.a[1][1]=A.a[1][2]=1ull;
	B.a[1][1]=a;
	B.a[1][2]=1ull;
	B.a[2][1]=b;
	if(n==1)A.a[1][1]=1;
	else A*=qpow(B,n-2ull,7ull);
	printf("%llu\n",A.a[1][1]);
	goto label;
	return 0;
}
MA qpow(MA a,ULL b,ULL p){
	MA ans;
	ans.init(1ull);
	for(;b;b>>=1ull,a=a*a%p)if(b&1ull)ans=ans*a%p;
	return ans;
}