提出 #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
結果
AC × 4
AC × 63
セット名 テストケース
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