#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define int long long #define mp make_pair #define pii pair #define fi first #define se second #define pb push_back const int MOD = 998244353;// const int FACTMAX = 2000005;// const int CATALANMAX = 1000005;// const int MAXA = 1000005; int fact[FACTMAX], invfact[FACTMAX], cat[CATALANMAX]; int smallinv[MAXA]; int expo(int a, int b){ int res=1; a%=MOD; while (b){ if (b&1)res=(res*a)%MOD; a=(a*a)%MOD; b>>=1; } return res; } int inv(int num){ return expo(num, MOD-2); } void initfact(){ fact[0]=1; for (int i=1; i=0; --i)invfact[i]=(invfact[i+1]*(i+1))%MOD; } int ncr(int n, int r){ if (nlim/a)return lim+1; x*=a; } return x; } int isqrt(int x){ int r=sqrtl((long double)x); while ((r+1)<=x/(r+1))++r; while (r>x/r)--r; return r; } int sum2(int n){ n%=MOD; return (((n*(n+1))%MOD)*((2*n+1)%MOD))%MOD*inv(6)%MOD; } int sum3(int n){ n%=MOD; int s=((n*(n+1))%MOD)*inv(2)%MOD; return (s*s)%MOD; } int sum4(int n){ n%=MOD; int t1=(n*(n+1))%MOD; int t2=(2*n+1)%MOD; int t3=(3*n%MOD*n%MOD+3*n-1+MOD)%MOD; return (((t1*t2)%MOD)*t3)%MOD*inv(30)%MOD; } int sumrange(int l, int r){ if (l>r)return 0; return (((l+r)%MOD)*((r-l+1)%MOD))%MOD*inv(2)%MOD; } int pref(int x){ if (x<=0)return 0; int m=isqrt(x); int n=m-1; int full=(2*sum4(n)+3*sum3(n)+sum2(n))%MOD; int tail=(m%MOD)*sumrange(m*m, x)%MOD; return (full+tail)%MOD; } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); for (int i=1; i>t; while (t--){ int n; cin>>n; vector ev; for (int k=3; k<=60; ++k)for (int a=2; ; ++a){ int x=pw(a, k, n); if (x>n)break; ev.pb({x, a}); } sort(ev.begin(), ev.end()); int cur=1, h=1, ans=0, i=0; while (i