记录编号 74919 评测结果 AAAAAAAAAA
题目名称 eins 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 4.806 s
提交时间 2013-10-26 18:19:18 内存使用 0.32 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll SIZEN=3;
ll MOD;
class MATRIX{
public:
	ll n,m;//n行m列
	ll s[SIZEN][SIZEN];
};
MATRIX operator * (MATRIX &a,MATRIX &b){
	MATRIX c;
	c.n=a.n;c.m=b.m;
	ll i,j,k;
	for(i=1;i<=c.n;i++){
		for(j=1;j<=c.m;j++){
			c.s[i][j]=0;
			for(k=1;k<=a.m;k++){
				c.s[i][j]+=(a.s[i][k]*b.s[k][j])%MOD;
			}
			c.s[i][j]%=MOD;
		}
	}
	return c;
}
MATRIX I;//单位矩阵
MATRIX FO;
MATRIX ori;
MATRIX quickpow(MATRIX a,ll x){//a^x
	MATRIX s;
	s=I;
	while(x){
		if(x&1) s=s*a;
		a=a*a;
		x>>=1;
	}
	return s;
}
ll N;
void init(void){
	I.n=I.m=2;
	I.s[1][1]=1,I.s[1][2]=0;
	I.s[2][1]=0,I.s[2][2]=1;
	FO.n=FO.m=2;
	FO.s[1][1]=0,FO.s[1][2]=1;
	FO.s[2][1]=1,FO.s[2][2]=1;
	ori.n=1,ori.m=2;
	ori.s[1][1]=0,ori.s[1][2]=1;
}
void work(void){
	scanf("%lld%lld",&N,&MOD);
	MATRIX ans;
	MATRIX temp=quickpow(FO,N);
	ans=ori*temp;
	printf("%lld\n",ans.s[1][1]);
}
int main(){
	freopen("eins.in","r",stdin);
	freopen("eins.out","w",stdout);
	init();
	ll i,T;
	scanf("%lld",&T);
	for(i=1;i<=T;i++) work();
	return 0;
}