QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#406829 | #5099. 朝圣道 | _l_l_ | Compile Error | / | / | C++14 | 2.6kb | 2024-05-07 19:05:54 | 2024-05-07 19:05:58 |
Judging History
This is the latest submission verdict.
- [2024-05-07 19:05:58]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-05-07 19:05:54]
- Submitted
answer
#include <bits/stdc++.h>
using namespace std;
void init(int o, int p);
int ask(long long n);
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int o, T, p;
std::cin >> o >> T >> p;
init(o, p);
for (int i = 1; i <= T; i++) {
long long n;
std::cin >> n;
std::cout << ask(n) << '\n';
}
return 0;
}
int exgcd(int a, int b, int &x, int &y) {
if (b == 0) return x = 1, y = 0, a;
int g = exgcd(b, a % b, y, x); y -= a / b * x; return g;
}
int inv(int a, int p) {int x, y; exgcd(a, p, x, y); return (x % p + p) % p;}
int qkpow(int a, int b) {int ans = 1; for (; b; b >>= 1, a *= a) if (b & 1) ans *= a; return ans;}
struct sub {
vector<int> muls, invn; int p, k, pk, pw[4][32001];
void init(int p_, int k_) {
p = p_; k = k_; pk = qkpow(p, k); muls.resize(pk); muls[0] = 1;
for (int i = 1; i < pk; i++) muls[i] = i % p ? 1ll * muls[i - 1] * i % pk : muls[i - 1];
invn.resize(pk); for (int i = 1; i < pk; i++) invn[i] = inv(i, pk);
pw[0][0] = pw[1][0] = pw[2][0] = pw[3][0] = 1;
for (int i = 1; i <= 32000; i++) pw[0][i] = 1ll * pw[0][i - 1] * (pk + 1) / 2 * (pk + 1) / 2 % pk;
for (int i = 1; i <= 32000; i++) pw[1][i] = 1ll * pw[1][i - 1] * pw[0][32000] % pk;
for (int i = 1; i <= 32000; i++) pw[2][i] = 1ll * pw[2][i - 1] * pw[1][32000] % pk;
for (int i = 1; i <= 32000; i++) pw[3][i] = 1ll * pw[3][i - 1] * pw[2][32000] % pk;
}
int getfact(long long n) {
if (n < p) return muls[n];
else if (n / pk & 1) return pk - 1ll * muls[n % pk] * getfact(n / p) % pk;
else return 1ll * muls[n % pk] * getfact(n / p) % pk;
}
int C(long long n) {
long long cnt = 0;
for (long long x = 2 * n; x; cnt += (x /= p));
for (long long x = n; x; cnt -= 2 * (x /= p));
if (cnt >= k) return 0;
int tmp = invn[getfact(n)];
return 1ll * getfact(2 * n) * tmp * tmp % pk * qkpow(p, cnt) % pk;
}
int sb(long long n) {
return 1ll * pw[0][n % 32000] * pw[1][n / 32000 % 32000] *
pw[2][n / 1024000000 % 32000] % pk * pw[3][n / 32768000000000ll] % pk;
}
} cnm[7];
int o, p, m;
vector<int> plist, pnum; int Ml[7];
void init(int o_, int p_) {
o = o_, p = p_;
for (int i = 2; i * i <= p_; i++) if (p_ % i == 0) {
plist.push_back(i); pnum.push_back(0); while (p_ % i == 0) p_ /= i, pnum.back()++;
}
if (p_ > 1) plist.push_back(p_), pnum.push_back(1);
m = plist.size(); for (int i = 0; i < m; i++) cnm[i].init(plist[i], pnum[i]);
for (int i = 0; i < m; i++) Ml[i] = p / cnm[i].pk * inv(p / cnm[i].pk, cnm[i].pk);
}
int ask(long long n) {
long long ans = 0;
for (int i = 0; i < m; i++) {
int ret = 1ll * cnm[i].C(n) * (n % cnm[i].pk) * cnm[i].sb(n) % cnm[i].pk;
ans += 1ll * ret * Ml[i];
}
return ans % p;
}
详细
/usr/bin/ld: /tmp/ccatsnJd.o: in function `main': answer.code:(.text.startup+0x0): multiple definition of `main'; /tmp/cct1B83d.o:implementer.cpp:(.text.startup+0x0): first defined here collect2: error: ld returned 1 exit status