玄学做法:
打表找规律:

名称 缩写
a0a_0 1
a1a_1 3
a2a_2 8
a3a_3 20
a4a_4 48
... ...
ana_n 2an1+2n12*a_{n-1}+2^{n-1}

根据递推公式:an=2an1+2n1a_n=2*a_{n-1}+2^{n-1}
可以得到:an=n2n1+2na_n=n*2^{n-1}+2^{n}
逻辑做法:
注:10n2{10_n}_2表示二进制写法,1后面有n个0
对于ana_n,最终目标是10n2{10_n}_2。对于i=02nlowbit(i)\sum_{i=0}^{2^n}lowbit(i)相当于二进制从11加到10n2{10_n}_2,那么
10n2=10n12+10n22+...+1002{10_n}_2={10_{n-1}}_2+{10_{n-2}}_2+...+{10_{0}}_2
表示出来就可以得到an=i=0n1ai+2na_n=\sum_{i=0}^{n-1}a_i+2^{n}
=2an1+2n1=2*a_{n-1}+2^{n-1}
AC代码

#include <bits/stdc++.h>
#define end '\n'
using namespace std;
const long long mod = 998244353;
inline void IOS()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
}
long long qpow(long long a, long long b)
{
    long long ans = 1;
    if(b<0)
        return 1;
    while (b)
    {
        if (b & 1)
            ans = ans * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ans;
}
unsigned long long n;
void dilingtian()
{
    __int128 ans = ((__int128)qpow(2, n - 1) * (__int128)n % (__int128)mod + (__int128)qpow(2, n)) % (__int128)mod;
    printf("%lld\n", (int)ans);
}
int main(void)
{
    // IOS();
    long long t;
    scanf("%lld",&t);
    while (t--)
    {
        scanf("%lld", &n);
        dilingtian();
    }
    return 0;
}