@[SSerxhs](/space/show?uid=29826) 为什么要?
```cpp
#include <bits/stdc++.h>
#define newline printf ("\n")
#define space printf (" ")
#define cinfalse ios::sync_with_stdio(false)
#define fread(a) freopen (a".in", "r", stdin), freopen(a".out", "w", stdout)
#define MAXN 5
using namespace std;
long long p;
struct Martix
{
long long g[MAXN][MAXN];
void clear()
{
memset (g, 0, sizeof (g));
return ;
}
Martix operator * (const Martix &b) const
{
Martix res;
res.clear();
for (int i = 0; i < 2; i ++)
for (int j = 0; j < 2; j ++)
for (int k = 0; k < 2; k ++)
res.g[i][j] += (g[i][k]*b.g[k][j])%p, res.g[i][j] %= p;
return res;
}
Martix operator *= (const Martix &b)
{
return *this = *this*b;
}
Martix operator ^ (long long k) const
{
Martix a = *this;
Martix res;
res.clear();
for (int i = 0; i < 2; i ++)
res.g[i][i] = 1;
while (k)
{
if (k&1)
res *= a;
a *= a, k >>= 1;
}
return res;
}
Martix operator ^= (long long k)
{
return *this = *this^k;
}
};
Martix a, b;
long long read()
{
long long x = 0, f = 1;
char c = getchar();
while(c < '0' || c > '9')
{
if(c == '-')
f = -1;
c = getchar();
}
while(c >= '0' && c <= '9')
x = x*10 + c-'0', c = getchar();
return f*x;
}
long long n;
long long A[2], f[2];
int main()
{
for (int i = 0; i < 2; i ++)
A[i] = read();
for (int i = 0; i < 2; i ++)
f[i] = read();
n = read(), p = read();
a.g[0][0] = A[0], a.g[0][1] = A[1];
a.g[1][0] = 1, a.g[1][1] = 0;
a ^= (n-2);
printf ("%lld", (a.g[0][0]*f[1]+a.g[0][1]*f[0])%p);
return 0;
}
```
这不就完了吗?
by tocek_shiki @ 2018-10-29 00:13:20
@[fff团666](/space/show?uid=49562) 这题不用是因为这题开在了long long以内,谁知道会不会出像4000那样的毒瘤题
by SSerxhs @ 2018-10-29 01:07:37
kg is fun
by Rieman_sum @ 2023-07-13 09:21:21