//たぶん終わらない #include #include #include using namespace std; typedef long long ll; typedef __int128_t int128; const ll MOD = 998244353; /** * xy <= n (x, y >= 1) * Stern-Brocot */ struct LatticeCounter { ll N; int128 count; void solve_recursive(ll n, ll a, ll b, ll c, ll d, ll x, ll y) { ll m = a + c, p = b + d; if (m * (int128)y + (int128)p * x * y > n) return; if (m * (int128)y + (int128)p * x * y <= n) { ll x_next = (n - p * (int128)x * y) / (p * y + m); ll y_next = (n - m * (int128)x * y) / (m * x + p); count += (int128)x_next * y_next; solve_recursive(n, a, b, m, p, x, y); solve_recursive(n, m, p, c, d, x, y); } } ll get_S(ll n) { if (n <= 0) return 0; if (n == 1) return 1; ll k = pow(n, 0.5); while ((k + 1) * (int128)(k + 1) <= n) k++; while (k * (int128)k > n) k--; int128 sum_val = 0; for (ll l = 1, r; l <= k; l = r + 1) { r = n / (n / l); if (r > k) r = k; sum_val += (int128)(n / l) * (r - l + 1); } int128 res = sum_val * 2 - (int128)k * k; return (ll)(res % MOD); } }; ll fast_S(ll n) { if (n <= 0) return 0; ll k = sqrtl(n); while ((k + 1) * (int128)(k + 1) <= n) k++; while (k * (int128)k > n) k--; int128 res = 0; for (ll i = 1; i <= k; ++i) { res += n / i; } res = res * 2 - (int128)k * k; return (ll)(res % MOD); } void solve() { ll N; if (!(cin >> N)) return; ll K = 2 * N + 1; ll sK = fast_S(K); ll sK2 = fast_S(K / 2); ll sK4 = fast_S(K / 4); ll fK = (sK - 2 * sK2 % MOD + sK4 + 2LL * MOD) % MOD; ll ans = (fK - (K % MOD) + MOD) % MOD; cout << ans << endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; if (!(cin >> T)) return 0; while (T--) { solve(); } return 0; }