不知道怎么起标题才能吸引人,那就亲亲。
查看原帖
不知道怎么起标题才能吸引人,那就亲亲。
341329
Alexandra楼主2023/8/11 02:28

RTRT,WAWA 后四个点。
评测记录
代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,p;
struct fun
{
	long long d[6][6];
}o,a;
long long mul(long long a,long long b)
{
	long long c=0;
	while(b)
	{
		if(b&1)c=(c+a)%p;
		a=(a+a)%p;
		b>>=1;
	}
	return c;
}
fun operator *(fun b,fun c)
{
	fun dd;
	memset(dd.d,0,sizeof(dd.d));
	for(int i=1;i<=2;i++)
	{
		for(int j=1;j<=2;j++)
		{
			for(int k=1;k<=2;k++)dd.d[i][j]=(mul(b.d[i][k],c.d[k][j])+dd.d[i][j])%p;
		}
	}
	return dd;
}
fun ksm(fun x,int pp)
{
	if(pp==1)
	{
		return x;
	}
	fun oo=ksm(x,pp/2);
	if(pp&1)return oo*oo*x;
	return oo*oo;
}
long long ksmm(long long x,long long pp)
{
	if(pp==1)
	{
		return x%p;
	}
	long long oo=ksmm(x,pp/2);
	if(pp&1)return oo*oo%p*x%p;
	return oo*oo%p;
}
int main ()
{
	scanf("%lld%lld",&n,&p);
	if(n<=1)printf("0\n");
	else
	{
		n++;
		a.d[1][2]=a.d[2][1]=a.d[2][2]=1;
		o.d[1][1]=o.d[1][2]=1;
		fun num=o*ksm(a,n-1);
		printf("%lld\n",ksmm(((num.d[1][1]+num.d[1][2])%p-(n+1)%p+p)%p,n)%p);
	}
	return 0;
}
2023/8/11 02:28
加载中...