记录编号 282643 评测结果 AAAAAAAAAA
题目名称 选拔队员 最终得分 100
用户昵称 GravatarAntiLeaf 是否通过 通过
代码语言 C++ 运行时间 0.598 s
提交时间 2016-07-13 18:50:47 内存使用 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]+=a[i][k]*x.a[k][j];
		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,p;
int T;
int main(){
#define MINE
#ifdef MINE
	freopen("seata.in","r",stdin);
	freopen("seata.out","w",stdout);
#endif
	scanf("%d%llu",&T,&p);
	while(T--){
		scanf("%llu",&n);
		A.a[1][1]=A.a[1][2]=1;
		B.a[1][1]=B.a[1][2]=B.a[2][1]=1;
		A=A*qpow(B,n,p)%p;
		printf("%llu\n",A.a[1][1]);
	}
	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;
}