PYXFIB

include<bits/stdc++.h>

define LL long long

define V inline void

define I inline int

define FOR(i,a,b) for(register int i=a,end##i=b;i<=end##i;++i)

define REP(i,a,b) for(register int i=a,end##i=b;i>=end##i;--i)

define go(i,x) for(int i=hed[x];i;i=e[i].pre)

using namespace std;
inline LL read()
{
char x='\0';
LL fh=1,sum=0;
for(x=getchar();x<'0'||x>'9';x=getchar())if(x'-')fh=-1;
for(;x>='0'&&x<='9';x=getchar())sum=sum10+x-'0';
return fh
sum;
}
LL T,n,k,p;
I add(int a,int b){return a+b>=p?a+b-p:a+b;}
I ksm(int a,int b,int mod)
{
int sum=1;
while(b)
{
if(b&1)sum=1LLsuma%mod;
b>>=1;
a=1LLaa%mod;
}
return sum;
}
int pri[29],pcnt;
I getg(int phi,int mod)
{
pcnt=0;
int x=phi;
for(int i=2;i*i<=x;i++)
{
if(x%i
0)
{
pri[++pcnt]=i;
while(x%i0)x/=i;
}
}
if(x!=1)pri[++pcnt]=x;
for(int i=2;i<=mod;i++)
{
bool flag=true;
for(LL j=1;j<=pcnt;j++)
{
if(ksm(i,phi/pri[j],mod)
1)
{
flag=false;
break;
}
}
if(flag)return i;
}
return 0;
}
struct matrix{
int h,w;
int ju[3][3];
matrix(){h=w=2,ju[1][1]=ju[2][2]=1,ju[1][2]=ju[2][1]=0;}
int* operator[](LL k){return ju[k];}
friend matrix operator(int k,matrix a)
{
a[1][1]=1LL
ka[1][1]%p;
a[1][2]=1LL
ka[1][2]%p;
a[2][1]=1LL
ka[2][1]%p;
a[2][2]=1LL
ka[2][2]%p;
return a;
}
friend matrix operator
(matrix a,matrix b)
{
matrix ret;
ret[1][1]=add(1LLa[1][1]b[1][1]%p,1LLa[1][2]b[2][1]%p);
ret[1][2]=add(1LLa[1][1]b[2][1]%p,1LLa[1][2]b[2][2]%p);
ret[2][1]=add(1LLa[2][1]b[1][1]%p,1LLa[2][2]b[2][1]%p);
ret[2][2]=add(1LLa[2][1]b[1][2]%p,1LLa[2][2]b[2][2]%p);
return ret;
}
};
matrix matksm(matrix a,LL b)
{
matrix sum;
sum.h=sum.w=2;
sum[1][1]=sum[2][2]=1;
sum[1][2]=sum[2][1]=0;
while(b)
{
if(b&1)sum=suma;
b>>=1;
a=a
a;
}
return sum;
}
int main()
{
T=read();
while(T--)
{
n=read(),k=read(),p=read();
int g=getg(p-1,p),w=ksm(g,(p-1)/k,p);
// cout<<"g w "<<g<<' '<<w<<endl;//
matrix A;
A.h=A.w=2;
int ans=0;
FOR(j,0,k-1)
{
A[1][1]=A[1][2]=A[2][1]=1,A[2][2]=0;
A=ksm(w,j,p)A;
A[1][1]++,A[2][2]++;
A=matksm(A,n);
ans=add(ans,A[1][1]);
}
ans=1LL
ans*ksm(k,p-2,p)%p;
printf("%d\n",ans);
}

return 0;

}

posted @ 2021-03-08 17:10  dinlon  阅读(54)  评论(0)    收藏  举报