#P51098. 「2019 集训队互测 Day 3」组合数求和

「2019 集训队互测 Day 3」组合数求和

题目描述

定义 f(j)  i=0n1 Cidj (modM), 0  f(j) < Mf(j)\ \equiv\ \sum_{i=0}^{n-1}\ C_{i\cdot d}^{j}\ {\pmod M},\ 0\ \leq\ f(j)\ <\ M,其中 n, d, Mn,\ d,\ M 为给定值。

现在给定 mm,输出 f(0) xor f(1) xor f(2) xor  xor f(m1)f(0)\ \mathrm{xor}\ f(1)\ \mathrm{xor}\ f(2)\ \mathrm{xor}\ \cdots\ \mathrm{xor}\ f(m - 1) 的值。

其中 CnmC_{n}^{m} 为组合数 nnmm,即 Cnm = {n!m!(nm)!,0mn0,otherwiseC_{n}^{m}\ =\ \begin{cases}\frac{n!}{m!\cdot (n-m)!}&, 0\leq m\leq n \cr 0&, \text{otherwise}\end{cases}xor\mathrm{xor} 表示异或和。

输入格式

一行四个整数 n, m, d, Mn,\ m,\ d,\ M,由空格隔开。

输出格式

一行一个整数表示答案。

样例

3 2 3 998244353
10

f(0)  C00 + C30 + C60  1 + 1 + 1  3 (mod 998244353)f(0)\ \equiv\ C_0^0\ +\ C_3^0\ +\ C_6^0\ \equiv\ 1\ +\ 1\ +\ 1\ \equiv\ 3\ (\bmod\ 998244353)

f(1)  C01 + C31 + C61  0 + 3 + 6  9 (mod 998244353)f(1)\ \equiv\ C_0^1\ +\ C_3^1\ +\ C_6^1\ \equiv\ 0\ +\ 3\ +\ 6\ \equiv\ 9\ (\bmod\ 998244353)

f(0) xor f(1) = 3 xor 9 = 10f(0)\ \mathrm{xor}\ f(1)\ =\ 3\ \mathrm{xor}\ 9\ =\ 10

数据范围与提示

本题采用捆绑测试。

对于所有测试包均满足 1  d  100, 1  md  3×106, 1  nd  109, 108  M  1091\ \leq\ d\ \leq\ 100,\ 1\ \leq\ m\cdot d\ \leq\ 3\times 10^6,\ 1\ \leq\ n\cdot d\ \leq\ 10^9,\ 10^8\ \leq\ M\ \leq\ 10^9

测试包编号 测试包分值 其它约定
11 44 nd, m  2000n\cdot d,\ m\ \leq\ 2000
22 1010 m  400m\ \leq\ 400
33 66 m  8000, M = 998244353m\ \leq\ 8000,\ M\ =\ 998244353
44 66 m  8000m\ \leq\ 8000
55 77 d = 1d\ =\ 1
66 2222 gcd(d, M) = 1\gcd(d,\ M)\ =\ 1
77 77 d = 2d\ =\ 2
88 77 d = 4d\ =\ 4
99 88 dd 为质数
1010 2323