1 条题解
-
0
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 2e6 + 10; int n, pr, prime[N]; bool v[N]; LL P; void init() { pr = 0; memset(v, 0, sizeof(v)); for(int i = 2; i <= 2 * n; i++) { if(v[i] == 0) prime[++pr] = i; for(int j = 1; j <= pr && (i * prime[j] <= 2 * n); j++) { v[i * prime[j]] = 1; if(i % prime[j] == 0) break; } } } LL Catalan(int n) { LL ans = 1; int M, cnt; for(int i = 1; i <= pr; i++) { if(prime[i] > 2 * n) break; M = 2 * n; cnt = 0; while(M > 0) M /= prime[i], cnt += M; M = n; while(M > 0) M /= prime[i], cnt -= M; M = n + 1; while(M > 0) M /= prime[i], cnt -= M; while(cnt--) ans = (ans * prime[i]) % P; } return ans; } int main() { scanf("%d%lld", &n, &P); init(); LL ans = Catalan(n); printf("%lld\n", ans); return 0; }
- 1
信息
- ID
- 3138
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 126
- 已通过
- 29
- 上传者