求和 |数学

小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);
	}
}
原文地址:https://www.cnblogs.com/naruto-mzx/p/12145156.html