#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int t,n,p;
//矩阵乘法
vector<vector<int> > f1(vector<vector<int> >a, vector<vector<int> > b){
int n=a.size(), k=a[0].size(), m=b[0].size();
vector<vector<int> > c(n,vector<int>(m,0));
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
for(int x=0;x<k;++x){
c[i][j]=(c[i][j]+a[i][x]*b[x][j])%p;
}
}
}
return c;
}
//矩阵快速幂
vector<vector<int> > f2(vector<vector<int> >a,int x){
vector<vector<int> >b(2);
b[0].push_back(1);
b[0].push_back(0);
b[1].push_back(0);
b[1].push_back(1);
if(x<0) return b;
while(x){
if(x&1) b=f1(b,a);
a=f1(a,a);
x>>=1;
}
return b;
}
//斐波那契数列
int main(){
cin>>t;
vector<vector<int> > b(2);
b[0].push_back(1);
b[0].push_back(1);
b[1].push_back(1);
b[1].push_back(0);
vector<vector<int> > e(2);
e[0].push_back(1);
e[1].push_back(1);
while(t--){
cin>>n>>p;
vector<vector<int> > c=f2(b,n-1);
vector<vector<int> > d=f1(c,e);
cout<<d[0][0]%p<<endl;
}
return 0;
}
2021-05-06
最新推荐文章于 2021-11-09 20:10:55 发布