列一遍0到20的二进制,一列列地看,规律就出来了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define Ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
const int p=998244353;
signed main()
{
Ios;
int k=1,n,m,ans=0;
cin>>n>>m;
while(k<=m)
{
if(k&m)
{
int t=(n+1)/(2*k);
ans=(ans+t*k)%p;
if((n+1)%(2*k))
{
int y=(n+1)%(2*k)-k;
if(y>0)
ans=(ans+y)%p;
}
}
k*=2;
}
cout<<ans<<endl;
return 0;
}