记录编号 85989 评测结果 AAAAAAAAAA
题目名称 eins 最终得分 100
用户昵称 GravatarChenyao2333 是否通过 通过
代码语言 C++ 运行时间 3.855 s
提交时间 2014-01-18 22:28:50 内存使用 0.29 MiB
显示代码纯文本
#include<stdio.h>

const int MAXN=2;
typedef long long LL;
LL MOD=0;



struct matrix{
	int m,n;//m行n列
	LL M[MAXN][MAXN];
	matrix():m(0),n(0){}
	matrix operator * (matrix &a){
		matrix m_t;m_t.m=m;m_t.n=a.n;
		for(int i=0;i<m;i++){
			for(int j=0;j<a.n;j++){
				LL sum=0;
				for(int ii=0;ii<n;ii++){
					sum+=(M[i][ii]*a.M[ii][j])%MOD;
				}
				m_t.M[i][j]=(sum%MOD);
			}
		}
		return m_t;
	}
};

matrix F1;
matrix C;

matrix pow(int n){
	if(n==1)return C;
	matrix a;
	a=pow(n/2);
	a=a*a;
	if(n%2)a=a*C;
	return a;
}

inline LL read(){
	LL a=0;
	char c;
	while(true){c=getchar();if(c>='0' && c<='9')break;}
	
	while(c){
		if(c>='0' && c<='9'){
			a*=10;
			a+=int(c-'0');
		}else break;
		c=getchar();
	}
	return a;
}

inline void write(LL a){
	char c[20]={0};int len=0;
	if(a==0){putchar('0');return;}
	while(a){
		c[len++]=a%10;
		a/=10;
	}
	for(int i=len-1;i>-1;i--){
		putchar(c[i]+'0');
	}
}

void endl(){
	putchar('\n');
}

void solve(){
	F1.m=2;F1.n=1;
	F1.M[0][0]=1;
	F1.M[1][0]=0;
	C.m=2;C.n=2;
	C.M[0][0]=1;C.M[0][1]=1;
	C.M[1][0]=1;C.M[1][1]=0;
	int T=0;
	scanf("%d",&T);
	while(T-->0){
		int n;n=read();MOD=read();
		if(n<=1){write(int((LL)n%MOD));endl();continue;}
		matrix a;
		a=pow(n-1)*F1;
		write(a.M[0][0]);endl;
	}
}

void open(){
	freopen("eins.in","r",stdin);
	freopen("eins.out","w",stdout);
}

int main(){
	open();
	solve();
	//LL a=read();
	//write(a);endl();
	return 0;
}