小a学习了树状数组之后,对 lowbit 很感兴趣,于是出了一道题。
给定非负整数n。记lowbit(x)为x的二进制表示下最低位的1所对应的值,如,某个数x最低位的1分别在第1,2,3位时,lowbit(x) ext{lowbit}(x)lowbit(x)分别是1,2,4。求 ∑i= 02nlowbit(i)sum_{i=0}^{2^n}
输出答案对998244353取模后的结果。T组数据。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int mod=998244353;
#define int long long
inline int ksm(int x,int y){
int ans=1ll;
while(y){
if(y&1)ans=ans*x%mod;
x=x*x%mod;
y>>=1;
}
return ans;
}
inline int read(){
int x=0; char c=getchar();
while(c<'0'||c>'9')c=getchar();
while('0'<=c&&c<='9'){ x=(x<<3)+(x<<1)+(c^48); c=getchar(); }
return x;
}
signed main(){
int T=read(),n;
while(T--){
n=read();
if(n==0)printf("1
");
else
printf("%lld
",ksm(2ll,n-1)*((n+2ll)%mod)%mod);
}
}