提出 #73350937
ソースコード 拡げる
// 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();
}
提出情報
| 提出日時 |
|
| 問題 |
E - Many LCMs |
| ユーザ |
goropikari |
| 言語 |
C++23 (GCC 15.2.0) |
| 得点 |
475 |
| コード長 |
4904 Byte |
| 結果 |
AC |
| 実行時間 |
996 ms |
| メモリ |
44680 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 |
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 |