CF1792E Divisors and Table

题目描述

给定一个 $n \times n$ 的乘法表以及一个正整数 $m = m_1 \cdot m_2$。一个 $n \times n$ 的乘法表指的是一个有 $n$ 行 $n$ 列的表格,行和列编号从 $1$ 到 $n$,其中 $a_{i, j} = i \cdot j$。 对于 $m$ 的每一个因数 $d$,判断:$d$ 是否至少在表中出现一次;如果出现,求出包含 $d$ 的最小行号。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10$)——测试用例的数量。 每个测试用例只有一行,包含三个整数 $n, m_1, m_2$($1 \le n \le 10^9$;$1 \le m_1, m_2 \le 10^9$),分别表示乘法表的大小以及整数 $m$ 的分解形式 $m_1 \cdot m_2$。

输出格式

对于每个测试用例,设 $d_1, d_2, \dots, d_k$ 是 $m$ 的所有因数,按递增顺序排列。再设 $a_1, a_2, \dots, a_k$ 为对应的答案数组,其中 $a_i$ 表示因数 $d_i$ 出现在表中的最小行号;如果不存在这样的行,则 $a_i = 0$。 由于数组 $a$ 可能很大,请按以下方式输出结果: 首先输出一个整数 $s$——表示在 $n \times n$ 的表中出现的 $m$ 的因数的数量。 然后输出一个值 $X = a_1 \oplus a_2 \oplus \dots \oplus a_k$,其中 $\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。

说明/提示

在第一个测试用例中,$m = 72 \cdot 1 = 72$,它有 $12$ 个因数:$[1, 2, 3, 4, 6, 8, 9, 12, 18, 24, 36, 72]$。 $3 \times 3$ 的乘法表如下: ``` 1 2 3 2 4 6 3 6 9 ``` 对 $m$ 的每一个因数,如果它出现在表中,则标记出其所在的最小行。于是答案数组 $a = [1, 1, 1, 2, 2, 0, 3, 0, 0, 0, 0, 0]$。其中非零元素有 $6$ 个,并且这些 $a_i$ 的异或结果等于 $2$。 在第二个测试用例中,$m = 10 \cdot 15 = 150$,它有 $12$ 个因数:$[1, 2, 3, 5, 6, 10, 15, 25, 30, 50, 75, 150]$。 在 $10 \times 10$ 的表中,除了 $75$ 和 $150$ 以外,其余因数均出现。 答案数组 $a = [1, 1, 1, 1, 1, 1, 3, 5, 3, 5, 0, 0]$。其中非零元素有 $10$ 个,并且这些 $a_i$ 的异或结果等于 $0$。 在第三个测试用例中,$m = 1 \cdot 210 = 210$,它有 $16$ 个因数:$[1, 2, 3, 5, 6, 7, 10, 14, 15, 21, 30, 35, 42, 70, 105, 210]$。 $6 \times 6$ 的乘法表如下: ``` 1 2 3 4 5 6 2 4 6 8 10 12 3 6 9 12 15 18 4 8 12 16 20 24 5 10 15 20 25 30 6 12 18 24 30 36 ``` 答案数组 $a = [1, 1, 1, 1, 1, 0, 2, 0, 3, 0, 5, 0, 0, 0, 0, 0]$。其中非零元素有 $8$ 个,并且这些 $a_i$ 的异或结果等于 $5$。 --- 翻译由 ChatGPT-5 完成