提出 #73310362


ソースコード 拡げる

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <unordered_map>
using namespace std;

const int MAX_A = 10000000;
const long long MOD = 998244353;

vector<int> spf(MAX_A + 1);

void build_spf() {
    for (int i = 1; i <= MAX_A; ++i)
        spf[i] = i;
    for (int i = 2; i * i <= MAX_A; ++i) {
        if (spf[i] == i) {
            for (int j = i * i; j <= MAX_A; j += i) {
                if (spf[j] == j)
                    spf[j] = i;
            }
        }
    }
}

vector<pair<int, int>> factorize(int x) {
    vector<pair<int, int>> factors;
    while (x > 1) {
        int p = spf[x];
        int cnt = 0;
        while (spf[x] == p) {
            cnt++;
            x /= p;
        }
        factors.emplace_back(p, cnt);
    }
    return factors;
}

long long mod_pow(long long base, long long exp, long long mod) {
    long long result = 1;
    base %= mod;
    while (exp > 0) {
        if (exp & 1) result = (result * base) % mod;
        base = (base * base) % mod;
        exp >>= 1;
    }
    return result;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    build_spf();

    int T;
    cin >> T;

    while (T--) {
        int N;
        cin >> N;
        vector<int> A(N);
        for (int i = 0; i < N; ++i) {
            cin >> A[i];
        }

        unordered_map<int, int> max_exp, second_max, count_max;

        for (int x : A) {
            auto fac = factorize(x);
            for (auto [p, e] : fac) {
                if (e > max_exp[p]) {
                    second_max[p] = max_exp[p];
                    max_exp[p] = e;
                    count_max[p] = 1;
                } else if (e == max_exp[p]) {
                    count_max[p]++;
                } else if (e > second_max[p]) {
                    second_max[p] = e;
                }
            }
        }

        long long global_lcm = 1;
        for (auto& [p, e] : max_exp) {
            global_lcm = (global_lcm * mod_pow(p, e, MOD)) % MOD;
        }

        vector<long long> ans(N);
        for (int k = 0; k < N; ++k) {
            long long res = global_lcm;
            auto fac = factorize(A[k]);
            for (auto [p, e] : fac) {
                if (e == max_exp[p] && count_max[p] == 1) {
                    int new_e = second_max[p];
                    int diff = e - new_e;
                    long long divisor = mod_pow(p, diff, MOD);
                    long long inv_div = mod_pow(divisor, MOD - 2, MOD);
                    res = (res * inv_div) % MOD;
                }
            }
            ans[k] = res;
        }

        for (int i = 0; i < N; ++i) {
            if (i) cout << " ";
            cout << ans[i];
        }
        cout << "\n";
    }

    return 0;
}

提出情報

提出日時
問題 E - Many LCMs
ユーザ stone_shadow
言語 C++23 (GCC 15.2.0)
得点 475
コード長 2877 Byte
結果 AC
実行時間 378 ms
メモリ 71792 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 475 / 475
結果
AC × 1
AC × 25
セット名 テストケース
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 81 ms 42488 KiB
01_large_t_01.txt AC 325 ms 42492 KiB
01_large_t_02.txt AC 322 ms 42568 KiB
01_large_t_03.txt AC 325 ms 42404 KiB
02_large_n_01.txt AC 310 ms 46760 KiB
02_large_n_02.txt AC 294 ms 47684 KiB
02_large_n_03.txt AC 279 ms 51376 KiB
03_prime_01.txt AC 166 ms 42440 KiB
03_prime_02.txt AC 275 ms 65064 KiB
03_prime_03.txt AC 309 ms 65024 KiB
03_prime_04.txt AC 311 ms 65024 KiB
03_prime_05.txt AC 232 ms 56372 KiB
03_prime_06.txt AC 234 ms 56424 KiB
04_small_prime_factor_01.txt AC 340 ms 42452 KiB
04_small_prime_factor_02.txt AC 209 ms 44872 KiB
04_small_prime_factor_03.txt AC 213 ms 44792 KiB
04_small_prime_factor_04.txt AC 217 ms 44876 KiB
04_small_prime_factor_05.txt AC 283 ms 43604 KiB
04_small_prime_factor_06.txt AC 282 ms 43600 KiB
05_large_value_01.txt AC 262 ms 42492 KiB
05_large_value_02.txt AC 156 ms 42500 KiB
05_large_value_03.txt AC 251 ms 54316 KiB
05_large_value_04.txt AC 378 ms 71792 KiB
05_large_value_05.txt AC 257 ms 49836 KiB
05_large_value_06.txt AC 234 ms 56960 KiB