rt,矩阵快速幂 WA 了?
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const i64 MOD = 7528443412579576937;
i64 mul(i64 a, i64 b) {
i64 res = 0;
a %= MOD;
b %= MOD;
for (; b; b >>= 1, a = (a + a) % MOD)
if (b & 1)
res = (res + a) % MOD;
return res;
}
struct Matrix {
i64 A[2][2];
Matrix() {
A[0][0] = A[0][1] = A[1][0] = A[1][1] = 0;
}
Matrix operator*(const Matrix &other) const {
Matrix res;
for (int i = 0; i < 2; ++i)
for (int k = 0; k < 2; ++k)
for (int j = 0; j < 2; ++j)
res.A[i][j] = (res.A[i][j] + mul(A[i][k], other.A[k][j])) % MOD;
return res;
}
};
Matrix pow_mat(Matrix a, i64 n) {
Matrix res;
res.A[0][0] = res.A[1][1] = 1;
for (; n; n >>= 1, a = a * a)
if (n & 1)
res = res * a;
return res;
}
i64 solve(i64 b, i64 d, i64 n) {
if (n == 0) return 1;
i64 delta = (b * b - d) / 4;
Matrix mat;
mat.A[0][0] = b;
mat.A[0][1] = (MOD - delta) % MOD;
mat.A[1][0] = 1;
mat.A[1][1] = 0;
mat = pow_mat(mat, n - 1);
i64 kn = (mul(mat.A[0][0], b) + mul(mat.A[0][1], 2)) % MOD;
if (n % 2 == 0 && b * b != d)
kn = (kn - 1 + MOD) % MOD;
return kn;
}
int main() {
i64 b, d, n;
cin >> b >> d >> n;
cout << solve(b, d, n) << '\n';
return 0;
}