这种因为某一个东西范围很大的,多半用插值多项式来解决。
#include<bits/stdc++.h>
#define maxn 1505
using namespace std;
int A,n,mod,f[maxn][maxn],a[maxn],sums[maxn],invf[maxn]={
1,1},inv[maxn]={
1,1};
int main(){
scanf("%d%d%d",&A,&n,&mod);
for(int i=0;i<=3*n;i++) f[0][i] = 1;
for(int i=1;i<=n;i++)
for(int j=1;j<=3*n;j++)
f[i][j] = (1ll * f[i-1][j-1] * i * j + f[i][j-1]) % mod;
for(int i=0;i<=2*n;i++) a[i] = f[n][i+n];
A -= n;
n = 2 * n;
sums[n+1] = 1;
for(int i=n;i>=0;i--) sums[i] = 1ll * sums[i+1] * (A-i) % mod;
for(int i=2;i<=n;i++) inv[i] = 1ll * (mod - mod / i) * inv