AT_abc356_d [ABC356D] Masked Popcount
Description
[problemUrl]: https://atcoder.jp/contests/abc356/tasks/abc356_d
整数 $ N,M $ が与えられるので、 $ \displaystyle\ \sum_{k=0}^{N} $ $ \rm{popcount} $$ (k\ \mathbin{\&}\ M) $ を $ 998244353 $ で割った余りを求めてください。
ただし、 $ \mathbin{\&} $ はビット単位 $ \rm{AND} $ 演算を表します。
ビット単位 $ \rm{AND} $ 演算とは? 非負整数 $ a $ と非負整数 $ b $ とのビット単位 $ \rm{AND} $ 演算の結果 $ x\ =\ a\ \mathbin{\&}\ b $ は次のように定義されます。
- $ x $ は全ての非負整数 $ k $ について以下の条件を満たすただ $ 1 $ つの非負整数である。
- $ a $ を $ 2 $ 進法で書き下した際の $ 2^k $ の位と $ b $ を $ 2 $ 進法で書き下した際の $ 2^k $ の位が共に $ 1 $ なら、 $ x $ を $ 2 $ 進法で書き下した際の $ 2^k $ の位は $ 1 $ である。
- そうでないとき、 $ x $ を $ 2 $ 進法で書き下した際の $ 2^k $ の位は $ 0 $ である。
例えば $ 3=11_{(2)},\ 5=101_{(2)} $ なので、 $ 3\ \mathbin{\&}\ 5\ =\ 1 $ となります。 $ \rm{popcount} $ とは? $ \rm{popcount} $$ (x) $ は、 $ x $ を $ 2 $ 進法で書き下した際に登場する $ 1 $ の個数を表します。
例えば $ 13=1101_{(2)} $ なので、 $ \rm{popcount} $$ (13)\ =\ 3 $ となります。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ M $
Output Format
答えを整数として出力せよ。
Explanation/Hint
### 制約
- $ N $ は $ 0 $ 以上 $ 2^{60} $ 未満の整数
- $ M $ は $ 0 $ 以上 $ 2^{60} $ 未満の整数
### Sample Explanation 1
\- $ \rm{popcount} $$ (0\mathbin{\&}3)\ =\ 0 $ - $ \rm{popcount} $$ (1\mathbin{\&}3)\ =\ 1 $ - $ \rm{popcount} $$ (2\mathbin{\&}3)\ =\ 1 $ - $ \rm{popcount} $$ (3\mathbin{\&}3)\ =\ 2 $ - $ \rm{popcount} $$ (4\mathbin{\&}3)\ =\ 0 $ であり、これらの和は $ 4 $ です。
### Sample Explanation 2
$ N=0 $ である場合や $ M=0 $ である場合もあります。
### Sample Explanation 3
$ 998244353 $ で割った余りを求めることに注意してください。