提出 #47963804
ソースコード 拡げる
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define db double
#define ldb long double
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define FR first
#define SE second
#define int long long
using namespace std;
inline int read() {
int x = 0; bool op = 0;
char c = getchar();
while(!isdigit(c))op |= (c == '-'), c = getchar();
while(isdigit(c))x = (x << 1) + (x << 3) + (c ^ 48), c = getchar();
return op ? -x : x;
}
const int N = 1e6 + 10;
const int P = 998244353;
const int INF = 1e18;
int ksm(int x, int k) {
int res = 1;
for(int pw = x; k; (k & 1) ? res = 1ll * res * pw % P : 0, pw = 1ll * pw * pw % P, k >>= 1);
return res;
}
int n, a, b, c, d;
int tot, pri[N], vis[N];
void sieve() {
for(int i = 2; i < N; i++) {
if(!vis[i])pri[++tot] = i;
for(int j = 1; j <= tot && i * pri[j] < N; j++) {
vis[i * pri[j]] = true;
if(i % pri[j] == 0)break;
}
}
return ;
}
int exgcd(int a, int b, int &x, int &y) {
if(!b) {x = 1; y = 0; return a;}
int res = exgcd(b, a % b, y, x); y -= (a / b) * x;
return res;
}
int calc(int k, int b, int p) {
int x, y, A = k, B = p, C = b;
int g = exgcd(A, B, x, y);
if(C % g)return -1;
// assert(A * (C / g) * x + B * y * (C / g) == C);
x = (x * (C / g) % (B / g) + (B / g)) % (B / g);
if(k * x % p != b)cout << k << ' ' << b << ' ' << p << endl;
assert(k * x % p == b);
return x;
}
int dM, pM, rM;
void calcM() {
vector<int> val(n);
dM = pM = rM = 1;
for(int i = 0; i < n; i++)val[i] = c + d * i;
auto mul = [&](int x) {
dM = dM * (x % d) % d;
pM = pM * (x % P) % P;
rM = (INF / x < rM ? INF + 1 : rM * x);
// cout << "mul:" << x << ' ' << rM << endl;
return ;
};
for(int i = 1; i <= tot; i++) {
int st = calc(d, (pri[i] - c % pri[i]) % pri[i], pri[i]);
if(!~st || st >= n)continue;
int mx = 0;
for(int j = st; j < n; j += pri[i]) {
if(val[j] % pri[i] == 0) {
int now = 0;
while(val[j] % pri[i] == 0)
now++, val[j] /= pri[i];
mx = max(mx, now);
}
}
while(mx--)mul(pri[i]);
}
for(int i = 0; i < n; i++)if(val[i] > 1)mul(val[i]);
return ;
}
signed main() {
n = read(); a = read(); b = read(); c = read(); d = read();
int g = __gcd(c, d), delta = a % g;
if(b % g)return puts("-1"), 0;
a /= g; b /= g; c /= g; d /= g;
sieve();
calcM();
// printf("M:%lld %lld %lld\n", rM % P, dM, pM);
// for(int i = 0; i < n; i++)assert(rM % (c + i * d) == 0);
int v = a * d - b * c, ans = -1;
if(rM != INF + 1)v = (v % rM + rM) % rM;
for(int y = 0; y <= d; y++) {
if(!y && v < 0)continue;
int now = (dM * y % d + v % d + d) % d;
if(!now) {ans = y; break;}
}
ans = ((pM * ans % P + v % P + P) % P * ksm(d, P - 2) * g % P + delta) % P;
printf("%lld\n", ans);
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | D - Many CRT |
| ユーザ | thebighead |
| 言語 | C++ 20 (gcc 12.2) |
| 得点 | 1200 |
| コード長 | 2950 Byte |
| 結果 | AC |
| 実行時間 | 74 ms |
| メモリ | 19580 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 1200 / 1200 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 01_sample_01.txt, 01_sample_02.txt, 01_sample_03.txt, 01_sample_04.txt |
| All | 01_sample_01.txt, 01_sample_02.txt, 01_sample_03.txt, 01_sample_04.txt, 02_small_N_01.txt, 02_small_N_02.txt, 02_small_N_03.txt, 02_small_N_04.txt, 02_small_N_05.txt, 02_small_N_06.txt, 02_small_N_07.txt, 02_small_N_08.txt, 02_small_N_09.txt, 02_small_N_10.txt, 02_small_N_11.txt, 02_small_N_12.txt, 03_mid_01.txt, 03_mid_02.txt, 03_mid_03.txt, 03_mid_04.txt, 03_mid_05.txt, 03_mid_06.txt, 03_mid_07.txt, 03_mid_08.txt, 03_mid_09.txt, 03_mid_10.txt, 04_rand_1_01.txt, 04_rand_1_02.txt, 04_rand_1_03.txt, 04_rand_1_04.txt, 04_rand_1_05.txt, 04_rand_1_06.txt, 04_rand_1_07.txt, 04_rand_1_08.txt, 04_rand_1_09.txt, 04_rand_1_10.txt, 05_rand_2_01.txt, 05_rand_2_02.txt, 05_rand_2_03.txt, 05_rand_2_04.txt, 05_rand_2_05.txt, 05_rand_2_06.txt, 05_rand_2_07.txt, 05_rand_2_08.txt, 05_rand_2_09.txt, 05_rand_2_10.txt, 06_large_gcd_01.txt, 06_large_gcd_02.txt, 06_large_gcd_03.txt, 06_large_gcd_04.txt, 06_large_gcd_05.txt, 07_d_divide_b_01.txt, 07_d_divide_b_02.txt, 07_d_divide_b_03.txt, 07_d_divide_b_04.txt, 07_d_divide_b_05.txt, 07_d_divide_b_06.txt, 08_det_equal_zero_01.txt, 08_det_equal_zero_02.txt, 08_det_equal_zero_03.txt, 08_det_equal_zero_04.txt, 09_ans_equal_zero_01.txt, 09_ans_equal_zero_02.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 01_sample_01.txt | AC | 18 ms | 12176 KiB |
| 01_sample_02.txt | AC | 1 ms | 3492 KiB |
| 01_sample_03.txt | AC | 14 ms | 12048 KiB |
| 01_sample_04.txt | AC | 14 ms | 12216 KiB |
| 02_small_N_01.txt | AC | 17 ms | 12184 KiB |
| 02_small_N_02.txt | AC | 20 ms | 12052 KiB |
| 02_small_N_03.txt | AC | 18 ms | 12048 KiB |
| 02_small_N_04.txt | AC | 23 ms | 12168 KiB |
| 02_small_N_05.txt | AC | 14 ms | 12056 KiB |
| 02_small_N_06.txt | AC | 13 ms | 12188 KiB |
| 02_small_N_07.txt | AC | 13 ms | 12248 KiB |
| 02_small_N_08.txt | AC | 13 ms | 12000 KiB |
| 02_small_N_09.txt | AC | 14 ms | 12240 KiB |
| 02_small_N_10.txt | AC | 12 ms | 12100 KiB |
| 02_small_N_11.txt | AC | 1 ms | 3456 KiB |
| 02_small_N_12.txt | AC | 1 ms | 3652 KiB |
| 03_mid_01.txt | AC | 20 ms | 12104 KiB |
| 03_mid_02.txt | AC | 1 ms | 3568 KiB |
| 03_mid_03.txt | AC | 19 ms | 12180 KiB |
| 03_mid_04.txt | AC | 17 ms | 12064 KiB |
| 03_mid_05.txt | AC | 21 ms | 12132 KiB |
| 03_mid_06.txt | AC | 21 ms | 12188 KiB |
| 03_mid_07.txt | AC | 20 ms | 12004 KiB |
| 03_mid_08.txt | AC | 1 ms | 3468 KiB |
| 03_mid_09.txt | AC | 24 ms | 12248 KiB |
| 03_mid_10.txt | AC | 17 ms | 12056 KiB |
| 04_rand_1_01.txt | AC | 70 ms | 19480 KiB |
| 04_rand_1_02.txt | AC | 1 ms | 3380 KiB |
| 04_rand_1_03.txt | AC | 71 ms | 19408 KiB |
| 04_rand_1_04.txt | AC | 66 ms | 19464 KiB |
| 04_rand_1_05.txt | AC | 1 ms | 3504 KiB |
| 04_rand_1_06.txt | AC | 68 ms | 19476 KiB |
| 04_rand_1_07.txt | AC | 1 ms | 3444 KiB |
| 04_rand_1_08.txt | AC | 66 ms | 19440 KiB |
| 04_rand_1_09.txt | AC | 66 ms | 19448 KiB |
| 04_rand_1_10.txt | AC | 66 ms | 19356 KiB |
| 05_rand_2_01.txt | AC | 74 ms | 19136 KiB |
| 05_rand_2_02.txt | AC | 1 ms | 3444 KiB |
| 05_rand_2_03.txt | AC | 70 ms | 19488 KiB |
| 05_rand_2_04.txt | AC | 66 ms | 19452 KiB |
| 05_rand_2_05.txt | AC | 1 ms | 3376 KiB |
| 05_rand_2_06.txt | AC | 72 ms | 19360 KiB |
| 05_rand_2_07.txt | AC | 1 ms | 3468 KiB |
| 05_rand_2_08.txt | AC | 66 ms | 19452 KiB |
| 05_rand_2_09.txt | AC | 69 ms | 19356 KiB |
| 05_rand_2_10.txt | AC | 1 ms | 3648 KiB |
| 06_large_gcd_01.txt | AC | 52 ms | 19484 KiB |
| 06_large_gcd_02.txt | AC | 58 ms | 19448 KiB |
| 06_large_gcd_03.txt | AC | 55 ms | 19404 KiB |
| 06_large_gcd_04.txt | AC | 56 ms | 19396 KiB |
| 06_large_gcd_05.txt | AC | 60 ms | 19440 KiB |
| 07_d_divide_b_01.txt | AC | 67 ms | 19136 KiB |
| 07_d_divide_b_02.txt | AC | 70 ms | 19360 KiB |
| 07_d_divide_b_03.txt | AC | 69 ms | 19448 KiB |
| 07_d_divide_b_04.txt | AC | 67 ms | 19580 KiB |
| 07_d_divide_b_05.txt | AC | 55 ms | 19360 KiB |
| 07_d_divide_b_06.txt | AC | 68 ms | 19580 KiB |
| 08_det_equal_zero_01.txt | AC | 1 ms | 3508 KiB |
| 08_det_equal_zero_02.txt | AC | 1 ms | 3644 KiB |
| 08_det_equal_zero_03.txt | AC | 1 ms | 3452 KiB |
| 08_det_equal_zero_04.txt | AC | 1 ms | 3484 KiB |
| 09_ans_equal_zero_01.txt | AC | 55 ms | 19408 KiB |
| 09_ans_equal_zero_02.txt | AC | 61 ms | 19132 KiB |