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 完成