提出 #73318301
ソースコード 拡げる
#include <stdio.h>
#define MOD 998244353
#define MAXA 10000001
#define MAXN 200005
int min_prime[MAXA];
int max1[MAXA], max2[MAXA], count1[MAXA];
int A[MAXN];
// Precompute smallest prime factor for fast factorization
void sieve() {
for (int i = 2; i < MAXA; i++) {
if (min_prime[i] == 0) {
for (int j = i; j < MAXA; j += i)
if (min_prime[j] == 0) min_prime[j] = i;
}
}
}
long long power(long long base, long long exp) {
long long res = 1;
base %= MOD;
while (exp > 0) {
if (exp % 2 == 1) res = (res * base) % MOD;
base = (base * base) % MOD;
exp /= 2;
}
return res;
}
void solve() {
int N;
scanf("%d", &N);
// Track which primes were seen to reset arrays efficiently
int seen_primes[MAXN * 10], sp_ptr = 0;
for (int i = 0; i < N; i++) {
scanf("%d", &A[i]);
int temp = A[i];
while (temp > 1) {
int p = min_prime[temp];
int count = 0;
while (temp % p == 0) {
temp /= p;
count++;
}
if (max1[p] == 0) seen_primes[sp_ptr++] = p;
if (count > max1[p]) {
max2[p] = max1[p];
max1[p] = count;
count1[p] = 1;
} else if (count == max1[p]) {
count1[p]++;
} else if (count > max2[p]) {
max2[p] = count;
}
}
}
// Calculate Global LCM
long long total_lcm = 1;
for (int i = 0; i < sp_ptr; i++) {
total_lcm = (total_lcm * power(seen_primes[i], max1[seen_primes[i]])) % MOD;
}
// Modular Inverse for division (if needed) is tricky because of MOD.
// Instead, calculate change for each k.
for (int i = 0; i < N; i++) {
long long current_lcm = total_lcm;
int temp = A[i];
while (temp > 1) {
int p = min_prime[temp];
int count = 0;
while (temp % p == 0) {
temp /= p;
count++;
}
// If this element was the unique provider of the max power
if (count == max1[p] && count1[p] == 1) {
// Remove p^max1 and multiply by p^max2
long long inv = power(power(p, max1[p]), MOD - 2);
current_lcm = (current_lcm * inv) % MOD;
current_lcm = (current_lcm * power(p, max2[p])) % MOD;
}
}
printf("%lld%c", current_lcm, (i == N - 1 ? '\n' : ' '));
}
// Clean up global arrays for next test case
for (int i = 0; i < sp_ptr; i++) {
int p = seen_primes[i];
max1[p] = max2[p] = count1[p] = 0;
}
}
int main() {
sieve();
int T;
scanf("%d", &T);
while (T--) solve();
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | E - Many LCMs |
| ユーザ | karishma_26 |
| 言語 | C23 (Clang 21.1.0) |
| 得点 | 475 |
| コード長 | 2946 Byte |
| 結果 | AC |
| 実行時間 | 334 ms |
| メモリ | 160484 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 475 / 475 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_01.txt |
| All | 00_sample_01.txt, 01_large_t_01.txt, 01_large_t_02.txt, 01_large_t_03.txt, 02_large_n_01.txt, 02_large_n_02.txt, 02_large_n_03.txt, 03_prime_01.txt, 03_prime_02.txt, 03_prime_03.txt, 03_prime_04.txt, 03_prime_05.txt, 03_prime_06.txt, 04_small_prime_factor_01.txt, 04_small_prime_factor_02.txt, 04_small_prime_factor_03.txt, 04_small_prime_factor_04.txt, 04_small_prime_factor_05.txt, 04_small_prime_factor_06.txt, 05_large_value_01.txt, 05_large_value_02.txt, 05_large_value_03.txt, 05_large_value_04.txt, 05_large_value_05.txt, 05_large_value_06.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_01.txt | AC | 109 ms | 41316 KiB |
| 01_large_t_01.txt | AC | 329 ms | 145320 KiB |
| 01_large_t_02.txt | AC | 333 ms | 145200 KiB |
| 01_large_t_03.txt | AC | 333 ms | 144864 KiB |
| 02_large_n_01.txt | AC | 316 ms | 141692 KiB |
| 02_large_n_02.txt | AC | 293 ms | 122972 KiB |
| 02_large_n_03.txt | AC | 272 ms | 110384 KiB |
| 03_prime_01.txt | AC | 265 ms | 158556 KiB |
| 03_prime_02.txt | AC | 326 ms | 160484 KiB |
| 03_prime_03.txt | AC | 331 ms | 160396 KiB |
| 03_prime_04.txt | AC | 334 ms | 160204 KiB |
| 03_prime_05.txt | AC | 297 ms | 159484 KiB |
| 03_prime_06.txt | AC | 299 ms | 159484 KiB |
| 04_small_prime_factor_01.txt | AC | 285 ms | 41132 KiB |
| 04_small_prime_factor_02.txt | AC | 192 ms | 42332 KiB |
| 04_small_prime_factor_03.txt | AC | 192 ms | 42380 KiB |
| 04_small_prime_factor_04.txt | AC | 197 ms | 42332 KiB |
| 04_small_prime_factor_05.txt | AC | 245 ms | 41596 KiB |
| 04_small_prime_factor_06.txt | AC | 242 ms | 41808 KiB |
| 05_large_value_01.txt | AC | 254 ms | 54564 KiB |
| 05_large_value_02.txt | AC | 217 ms | 78556 KiB |
| 05_large_value_03.txt | AC | 225 ms | 55948 KiB |
| 05_large_value_04.txt | AC | 270 ms | 80584 KiB |
| 05_large_value_05.txt | AC | 239 ms | 55436 KiB |
| 05_large_value_06.txt | AC | 241 ms | 79564 KiB |