社区讨论

88pts 求调/求 Hack

P4000斐波那契数列参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m3zr2mwt
此快照首次捕获于
2024/11/27 18:35
去年
此快照最后确认于
2025/11/04 13:48
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
char s[30000001];
long long c[4],d[4],t[4];
void f(long long*a,long long*b,long long p)
{   
    t[0]=((a[0]*b[0])%p+(a[1]*b[2])%p)%p;
    t[1]=((a[0]*b[1])%p+(a[1]*b[3])%p)%p;
    t[2]=((a[2]*b[0])%p+(a[3]*b[2])%p)%p;
    t[3]=((a[2]*b[1])%p+(a[3]*b[3])%p)%p;
    a[0]=t[0],a[1]=t[1],a[2]=t[2],a[3]=t[3];
}
 void g(long long n,long long p)
{
    c[1]=c[2]=d[0]=0,c[0]=c[3]=d[1]=d[2]=d[3]=1;
    while(n)
    {
    	if(n&1)f(c,d,p);
    	f(d,d,p);
    	n>>=1;
	}
}
signed main()
{
	long long p,q,r=1;
	__int128 n=0;
	cin>>s>>p;
	q=p;
	for(long long i=2;i*i<=p;i++)
	{
		if(q%i==0)
		{
			while(q%i==0)q/=i;
			r*=i*i-1;
		}	
    }
    if(q!=1)r*=q*q-1;
	for(int i=0;s[i];i++)n=(n*10+s[i]-'0')%r;
	g((long long)n,p);
	cout<<c[1]<<endl;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...