记录编号 113866 评测结果 AAAAAAAAAA
题目名称 eins 最终得分 100
用户昵称 GravatarrpCardinal 是否通过 通过
代码语言 C++ 运行时间 1.260 s
提交时间 2014-07-26 15:12:11 内存使用 0.26 MiB
显示代码纯文本
#include <cstdio>
#include <cstring>

int t,n;
unsigned long long p;

struct matrix
{
	unsigned long long a,b,c,d;
	matrix& operator=(const matrix &B)
	{a=B.a; b=B.b; c=B.c; d=B.d; return *this;}
	matrix operator*(const matrix &B)const
	{
		return (matrix){(a*B.a+b*B.c)%p,
			(a*B.b+b*B.d)%p,
			(c*B.a+d*B.c)%p,
			(c*B.b+d*B.d)%p};
	}
}E,F,T;

matrix pow(matrix A,int k)
{
	matrix R=E;
	while (k)
	{
		if (k&1) R=R*A;
		A=A*A; k>>=1;
	}
	return R;
}

int main()
{
	freopen("eins.in","r",stdin);
	freopen("eins.out","w",stdout);
	E=(matrix){1,0,0,1};
	F=(matrix){1,1,1,0};
	scanf("%d",&t);
	while (t--)
	{
		scanf("%d%lld",&n,&p);
		if (n==0) {printf("0\n"); continue;}
		T=pow(F,n-1);
		printf("%lld\n",T.a%p);
	}
	fclose(stdin); fclose(stdout);
	return 0;
}