Submission #73350937


Source Code Expand

// https://atcoder.jp/contests/abc445/tasks/abc445_e
// Sat 14 Feb 2026 10:08:19 PM JST
#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using mint = modint998244353;
// using mint = modint1000000007;
// using vmint = vector<mint>;
// modint::set_mod(10);
// using mint = modint;
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
using int128 = int128_t;
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define rep(i, n) for (long long int i = 0; i < (n); ++i)
#define rep2(i, k, n) for (long long int i = (k); i < (n); ++i)
using ll = long long;
using vint = vector<int>;
using vll = vector<ll>;
using vvint = vector<vector<int>>;
using vvll = vector<vector<ll>>;

// const ll INF = (ll)2e18+9;
// const int INF = (int)2e9 + 7;

template <typename T>
void chmin(T& a, T b) { a = min(a, b); }
template <typename T>
void chmax(T& a, T b) { a = max(a, b); }

template <typename T>
void print(vector<T> v) {
    int n = v.size();
    rep(i, n) {
        if (i == 0)
            cout << v[i];
        else
            cout << ' ' << v[i];
    }
    cout << endl;
}

void yesno(bool x) { cout << (x ? "Yes" : "No") << '\n'; }

void Yes() { yesno(true); }

void No() { yesno(false); }

// ceil(a/b)
ll ceil(ll a, ll b) { return (a + b - 1) / b; }

// floor(a/b)
ll floor(ll a, ll b) { return a / b; }

void solve();

int main() {
    solve();
    return 0;
}

using ull = unsigned long long;
template <class T>
using V = vector<T>;
template <class T>
using VV = V<V<T>>;

// bit op
int bsf(uint x) { return __builtin_ctz(x); }
int bsf(ull x) { return __builtin_ctzll(x); }

// binary gcd
ll gcd(ll _a, ll _b) {
    ull a = abs(_a), b = abs(_b);
    if (a == 0) return b;
    if (b == 0) return a;
    int shift = bsf(a | b);
    a >>= bsf(a);
    do {
        b >>= bsf(b);
        if (a > b) swap(a, b);
        b -= a;
    } while (b);
    return (a << shift);
}

template <class T, class U>
T pow_mod(T x, U n, T md) {
    T r = 1 % md;
    x %= md;
    while (n) {
        if (n & 1) r = (r * x) % md;
        x = (x * x) % md;
        n >>= 1;
    }
    return r;
}

bool is_prime(ll n) {
    if (n <= 1) return false;
    if (n == 2) return true;
    if (n % 2 == 0) return false;
    ll d = n - 1;
    while (d % 2 == 0) d /= 2;
    for (ll a : {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}) {
        if (n <= a) break;
        ll t = d;
        ll y = pow_mod<__int128_t>(a, t, n);  // over
        while (t != n - 1 && y != 1 && y != n - 1) {
            y = __int128_t(y) * y % n;  // flow
            t <<= 1;
        }
        if (y != n - 1 && t % 2 == 0) {
            return false;
        }
    }
    return true;
}

ll pollard_single(ll n) {
    if (is_prime(n)) return n;
    if (n % 2 == 0) return 2;
    ll st = 0;
    auto f = [&](ll x) { return (__int128_t(x) * x + st) % n; };
    while (true) {
        st++;
        ll x = st, y = f(x);
        while (true) {
            ll p = gcd((y - x + n), n);
            if (p == 0 || p == n) break;
            if (p != 1) return p;
            x = f(x);
            y = f(f(y));
        }
    }
}

V<ll> pollard(ll n) {
    if (n == 1) return {};
    ll x = pollard_single(n);
    if (x == n) return {x};
    V<ll> le = pollard(x);
    V<ll> ri = pollard(n / x);
    le.insert(le.end(), ri.begin(), ri.end());
    return le;
}

vector<pair<ll, ll>> factorize(ll n) {
    vll ps = pollard(n);
    map<ll, ll> mp;
    for (ll x : ps) mp[x]++;

    vector<pair<ll, ll>> facs;
    for (auto [k, cnt] : mp) facs.push_back({k, cnt});
    return facs;
}

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    auto cal = [&]() -> void {
        ll N;
        cin >> N;
        vll A(N);
        rep(i, N) cin >> A[i];

        vector<vector<pair<ll, ll>>> facs;
        for (ll a : A) {
            facs.push_back(factorize(a));
        }

        map<ll, ll> e1, e2;
        rep(i, N) {
            for (auto [p, cnt] : facs[i]) {
                if (e1[p] < cnt) {
                    e2[p] = e1[p];
                    e1[p] = cnt;
                } else if (e2[p] < cnt) {
                    e2[p] = cnt;
                }
            }
        }

        mint cm = 1;
        for (auto [p, cnt] : e1) {
            cm *= ((mint)p).pow(cnt);
        }

        vll ans;
        rep(i, N) {
            mint v = cm;
            for (auto [p, cnt] : facs[i]) {
                if (e1[p] == cnt) {
                    v /= mint(p).pow(e1[p] - e2[p]);
                }
            }
            ans.push_back(v.val());
        }
        print(ans);
    };

    int t;
    cin >> t;
    rep(i, t) cal();
}

Submission Info

Submission Time
Task E - Many LCMs
User goropikari
Language C++23 (GCC 15.2.0)
Score 475
Code Size 4904 Byte
Status AC
Exec Time 996 ms
Memory 44680 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 475 / 475
Status
AC × 1
AC × 25
Set Name Test Cases
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
Case Name Status Exec Time Memory
00_sample_01.txt AC 2 ms 3656 KiB
01_large_t_01.txt AC 933 ms 3528 KiB
01_large_t_02.txt AC 935 ms 3528 KiB
01_large_t_03.txt AC 932 ms 3572 KiB
02_large_n_01.txt AC 893 ms 15316 KiB
02_large_n_02.txt AC 859 ms 20472 KiB
02_large_n_03.txt AC 830 ms 33528 KiB
03_prime_01.txt AC 561 ms 3600 KiB
03_prime_02.txt AC 865 ms 41048 KiB
03_prime_03.txt AC 873 ms 41112 KiB
03_prime_04.txt AC 886 ms 41104 KiB
03_prime_05.txt AC 680 ms 22956 KiB
03_prime_06.txt AC 678 ms 22992 KiB
04_small_prime_factor_01.txt AC 896 ms 3544 KiB
04_small_prime_factor_02.txt AC 688 ms 35292 KiB
04_small_prime_factor_03.txt AC 688 ms 35092 KiB
04_small_prime_factor_04.txt AC 688 ms 35156 KiB
04_small_prime_factor_05.txt AC 791 ms 19368 KiB
04_small_prime_factor_06.txt AC 792 ms 19376 KiB
05_large_value_01.txt AC 947 ms 3452 KiB
05_large_value_02.txt AC 585 ms 3612 KiB
05_large_value_03.txt AC 996 ms 37996 KiB
05_large_value_04.txt AC 924 ms 44680 KiB
05_large_value_05.txt AC 969 ms 21336 KiB
05_large_value_06.txt AC 712 ms 24060 KiB