#include #include using namespace std; using ull = unsigned long long; using mint = atcoder::modint998244353; constexpr int LIMIT = 40; // Index * A Problem の解の上限 vector LCM; // 1, 2, ..., i の総LCM vector inv; void init() { LCM = vector(LIMIT + 1); LCM[1] = 1; for (int i = 2; i <= LIMIT; i++) { LCM[i] = lcm(LCM[i - 1], i); } inv = vector(LIMIT + 1); for (int i = 1; i <= LIMIT; i++) { inv[i] = mint(i).inv(); } } void solve() { ull N; cin >> N; auto count = [&](int ans) -> mint { mint loop = mint(N / LCM[ans]); return (mint(LCM[ans]) * inv[ans]) * (mint(N + 1) * loop - loop * (loop + 1) * mint(LCM[ans]) * inv[2]); }; mint answer = 0; for (int i = 1; i <= LIMIT; i++) { answer += count(i); } cout << answer.val() << "\n"; } int main() { cin.tie(nullptr); ios::sync_with_stdio(false); init(); int T; cin >> T; while (T--) solve(); }