提交时间:2024-07-30 14:00:39

运行 ID: 30761

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 9, Mod = 998244353; bitset<N> vis; vector<int> pri, pw[N]; int fact[N]; void init() { vis[0] = vis[1] = 1; for (int i = 2; i <= 1e6; i++) { if (!vis[i]) { pri.push_back(i), fact[i] = i; pw[i].push_back(1); ll lst = 1; while (1) { if (lst * i > 1e6) break; lst *= i, pw[i].push_back((int)lst); } } for (int j : pri) { if (i * j > 1e6) break; vis[i * j] = 1, fact[i * j] = j; if (i % j == 0) break; } } } int n, a[N]; vector<int> v[N]; set<int> st; void slv() { scanf("%d", &n); st.clear(); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); while (a[i] > 1) { int j = fact[a[i]], c = 0; while (a[i] % j == 0) a[i] /= j, c++; v[j].push_back(c), st.insert(j); } } for (auto it = st.begin(); it != st.end(); it++) { int c = *it; sort(v[c].begin(), v[c].end(), greater<int>()); for (int i = 1; i <= v[c].size(); i++) { a[i] = 1ll * a[i] * pw[c][v[c][i - 1]] % Mod; } v[c].clear(); } int ans = 0; for (int i = 1; i <= n; i++) (ans += a[i]) %= Mod; printf("%d\n", ans); } signed main() { init(); int T; scanf("%d", &T); while (T--) slv(); return 0; }