提交记录,求大佬帮助捏qwq
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxc=3;
const ll mod=7528443412579576937ll;
struct matrix{
ll c[maxc][maxc];
inline matrix() {memset(c,0,sizeof(c)); }
}s,t;
ll b,d,n;
inline ll mul(ll x,ll y){
if (x<y) swap(x,y);
ll res=0;
while (y){
if (y&1) res=(res+x)%mod;
x=(x+x)%mod;
y>>=1;
}
return res;
}
inline matrix mul(matrix x,matrix y){
matrix res;
for (int i=1;i<=2;i++){
for (int j=1;j<=2;j++){
for (int k=1;k<=2;k++){
res.c[i][j]=res.c[i][j]+mul(x.c[i][k],y.c[k][j]);
res.c[i][j]%=mod;
}
}
}
return res;
}
inline matrix poww(matrix x,ll y){
matrix res=s;
while (y){
if (y&1) res=mul(res,x);
x=mul(x,x);
y>>=1;
}
return res;
}
int main(){
scanf("%lld%lld%lld",&b,&d,&n);
if (!n){
printf("1\n");
return 0;
}
s.c[1][1]=(b*b+d)/2,s.c[2][1]=b;
t.c[1][1]=b,t.c[1][2]=1,t.c[2][1]=(d-b*b)/4;
matrix ans=poww(t,n-2);
// for (int i=1;i<=2;i++){
// for (int j=1;j<=2;j++) printf("%d ",ans.c[i][j]);
// printf("\n");
// }
printf("%lld\n",(ans.c[1][1]-(b*b!=d && !(n&1))%mod+mod)%mod);
return 0;
}