問題一覧 > 通常問題

No.3478 XOR-Folding Primes

レベル : / 実行時間制限 : 1ケース 4.000秒 / メモリ制限 : 1024 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 27
作問者 : 👑 loop0919 / テスター : ぽえ 遭難者
ProblemId : 13017 / yukicoder contest 494 オムニバス (順位表) / 自分の提出
問題文最終更新日: 2026-03-19 00:23:51
yukicoder contest 494 オムニバスの他の問題:

問題文

整数 $N, M$ が与えられます。
長さ $N$ の数列 $P = (P_1, P_2, \cdots, P_N)$ のうち、以下の条件をすべて満たすものの個数を $998244353$ で割った余りを求めてください。

  • $P$ の各要素はすべて $M$ 以下の素数である。
  • $1 \leq k \leq N$ なる任意の整数 $k$ について、$P_1 \oplus P_2 \oplus \cdots \oplus P_k$ は $M$ 以下の素数である。

ここで、$\oplus$ はビットごとの排他的論理和を表します。

$T$ 個のテストケースが与えられるので、それぞれについて答えてください。

ビットごとの排他的論理和 $\oplus$ とは(クリックで開く)

非負整数 $a, b$ のビットごとの排他的論理和 $a \oplus b$ は、以下のように定義されます。

  • $a \oplus b$ を二進表記したときの $2^k ~ (k \ge 0)$ の位の数は、$a, b$ を二進表記したときの $2^k$ の位の数のうち一方のみが $1$ であれば $1$ 、そうでなければ $0$ である。

例えば、$3 \oplus 5 = 6$ となります(二進表記にすると $011 \oplus 101 = 110$ )。
一般に $k$ 個の非負整数 $x_1, x_2, \cdots, x_k$ のビットごとの排他的論理和 $x_1 \oplus x_2 \oplus \cdots \oplus x_k$ は $(\cdots((x_1 \oplus x_2) \oplus x_3) \oplus \cdots \oplus x_k)$ と定義され、これは $x_1, x_2, \cdots, x_k$ の順番によらないことが証明できます。

制約

  • $1 \leq T \leq 10^5$
  • $1 \leq N \leq 10^9$
  • $2 \leq M \leq 10^7$
  • $M$ は素数である
  • 入力はすべて整数である

入力

入力は以下の形式で標準入力から与えられます。ここで、$t$ 番目 $(1 \leq t \leq T)$ のテストケースを $\mathrm{case}_t$ と表します。

$T$
$\mathrm{case}_1$
$\mathrm{case}_2$
$\vdots$
$\mathrm{case}_T$

各テストケースは以下の形式で与えられます。

$N$ $M$

出力

$T$ 行出力してください。 $t$ 行目には $t$ 番目のテストケースについての答えを出力してください。

サンプル

サンプル1
入力
4
2 7
1 101
919 9461
1000000000 9999991
出力
6
26
63669221
862727226

$1$ 番目のテストケースについて、例えば $P = (2, 7)$ が条件を満たします。

  • $k = 1$ のとき、$2$ は $M = 7$ 以下の素数です。
  • $k = 2$ のとき、$2 \oplus 7 = 5$ は $M$ 以下の素数です。

このような数列が $6$ 個存在します。

$3$ 番目、 $4$ 番目のテストケースについて、$998244353$ で割った余りを求めることに注意してください。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。