constint mod = 998244353; constint e2 = 116195171; intread() { int x = 0, f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); } while (c >= '0' && c <= '9') x = (x << 1) + (x << 3) + c - '0', c = getchar(); return x * f; }
intinc(int x, int y){ return (x + y >= mod) ? (x + y - mod) : (x + y); } intdel(int x, int y){ return (x - y < 0) ? (x - y + mod) : (x - y); } constint P = 998244353; constint gi = 3; intqpow(int a, ll x, int mo) { int res = 1; while (x) { if (x & 1) res = 1ll * res * a % mo; a = 1ll * a * a % mo; x >>= 1; } return res; }
int rev[N]; voidNTT(int *A, int n, int inv) { for (int i = 0; i < n; i++) if (i < rev[i]) swap(A[i], A[rev[i]]); for (int l = 1; l < n; l <<= 1) { int tt = qpow(gi, (P - 1) / (l << 1), P); int temp = (inv == 1 ? tt : qpow(tt, P - 2, P)); for (int i = 0; i < n; i += (l << 1)) { int omega = 1; for (int j = 0; j < l; j++, omega = 1ll * omega * temp % P) { int x = A[i + j], y = 1ll * omega * A[i + j + l] % P; A[i + j] = inc(x, y); A[i + j + l] = del(x, y); } } } int invv = qpow(n, P - 2, P); if (inv == -1) for (int i = 0; i < n; i++) A[i] = 1ll * A[i] * invv % P; } intinitNTT(int n, int m) { int ML = 1, bit = 0; while (ML < n + m) ML <<= 1, bit++; for (int i = 0; i < ML; i++) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (bit - 1)); return ML; } voidNTTX(int *a, int n, int *b, int m) { int ML = initNTT(n, m); NTT(a, ML, 1); NTT(b, ML, 1); for (int i = 0; i < ML; i++) a[i] = 1ll * a[i] * b[i] % P; NTT(a, ML, -1); } int pcnt, pr[N], npr[N], phi[N];
voidPrime_init(int X) { npr[1] = 1; phi[1] = 1; for (int i = 2; i <= X; i++) { if (!npr[i]) pr[++pcnt] = i, phi[i] = i - 1; for (int j = 1; j <= pcnt && pr[j] * i <= X; j++) { npr[pr[j] * i] = 1;
if (i % pr[j] == 0) { phi[i * pr[j]] = phi[i] * pr[j]; break; } else { phi[i * pr[j]] = phi[i] * phi[pr[j]]; } } } } int n, k; int f[N], g[N], a[N], b[N], e2p[N]; intmain() { int T = read(); Prime_init(1e5 + 10); while (T--) { memset(b, 0, sizeof(b)); memset(f, 0, sizeof(f)); memset(g, 0, sizeof(g)); memset(a, 0, sizeof(a)); int n = read();
for (int i = 1; i <= n; i++) b[phi[i]]++; for (int i = 0; i <= n; i++) e2p[i] = qpow(e2, 1ll * i * i, mod); for (int i = 0; i <= 2 * n; i++) f[i] = qpow(e2, 1ll * i * i, mod); for (int i = 1; i <= n; i++) { g[i] = a[i] = 1ll * b[i] * i % mod * qpow(e2p[i], mod - 2, mod) % mod; } // reverse(g, g + 1 + n); NTTX(g, n + 1, a, n + 1); //reverse(g, g + 1 + n); // int duo = 0; // for (int i = 1; i <= n; i++) // duo = inc(duo, 1ll * i * i % mod * b[i] % mod * b[i] % mod * qpow(2, 1ll * i * i, mod) % mod);