社区讨论
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 条回复,欢迎继续交流。
正在加载回复...