社区讨论

20pts求diao

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mddwcbt2
此快照首次捕获于
2025/07/22 10:09
8 个月前
此快照最后确认于
2025/11/04 03:58
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>

#define ll long long

using namespace std;

const ll N=20;

ll n,a1,a2,p,q,a,mod,res[N][N]={0},ch[N][N],F[N][N];

void mul(ll an[N][N],ll a[N][N],ll b[N][N]){
	ll c[N][N]={0};
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			for(int m=1;m<=n;++m)
				c[i][j]=(c[i][j]+a[i][m]*b[m][j]%mod+mod)%mod;
	memcpy(an, c, sizeof(c));
}

void ksm(ll a[N][N],ll b){
	while(b){
		if(b%2==1)
			mul(res,res,a);
		mul(a,a,a);
		b>>=1;
	}
}

int main(){
	cin>>p>>q>>a1>>a2>>a>>mod;
	if(a==1){
		cout<<a1%mod;
		return 0;
	}
    if(a==2){
		cout<<a2%mod;
		return 0;
	}
    p%=mod;
    q%=mod;
    a1%=mod;
    a2%=mod;
	n=2;
	for(int i=1;i<=n;++i)
		res[i][i]=1;
	ch[1][1]=p;
    ch[1][2]=1;
    ch[2][1]=q;
	F[1][1]=a1;
    F[1][2]=a2;
	ksm(ch,a-2);
	ll c[N][N]={0};
	for(int i=1;i<=1;++i)
		for(int j=1;j<=n;++j)
			for(int m=1;m<=n;++m)
				c[i][j]=(c[i][j]+F[i][m]*res[m][j]%mod+mod)%mod;
	cout<<c[1][1];
	return 0;
}

回复

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

正在加载回复...