感觉自己取模已经很干净了。
最后一个 Subtask 全 WA。
#include<bits/stdc++.h>
// #pragma G++ optimize(2)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define fi first
#define se second
const ll mod=998244353;
ll binpow(ll a,ll b) {
if(b==0) return 1;
if(b==1) return a%mod;
ll res=binpow(a,b/2);
if(b&1) return res*res%mod*a%mod;
else return res*res%mod;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll n;
cin>>n;
ll ans=1,i=2;
while((1ll<<(i-1))<=n) {
ans+=binpow(2,i-2)%mod*i%mod;
i++;
}
if((1ll<<(i-2))+1<=n) ans+=((n-(1ll<<(i-2)))%mod+mod)%mod*i%mod;
cout<<ans<<'\n';
return 0;
}
// 1 2 3 3 4 4 4 4 8个5 16个6 32个7 以此类推...
/*
i -> 2^(i-2)+1 ~ 2^(i-1)
*/