CF1028H Make Square
题目描述
我们称一个数组 $b_1, b_2, \ldots, b_m$ 是好的,如果存在两个下标 $i < j$,使得 $b_i \cdot b_j$ 是一个[完全平方数](https://en.wikipedia.org/wiki/Square_number)。
给定一个数组 $b_1, b_2, \ldots, b_m$,你每次操作可以执行以下两种之一:
- 将任意一个元素 $b_i$ 乘以任意一个质数 $p$;
- 如果 $b_i$ 能被质数 $p$ 整除,则将 $b_i$ 除以 $p$。
记 $f(b_1, b_2, \ldots, b_m)$ 为将数组 $b$ 变为好的所需的最少操作次数。
现在给定一个长度为 $n$ 的整数数组 $a_1, a_2, \ldots, a_n$,以及 $q$ 个询问,每个询问为 $l_i, r_i$。对于每个询问,输出 $f(a_{l_i}, a_{l_i + 1}, \ldots, a_{r_i})$。
输入格式
第一行包含两个整数 $n$ 和 $q$($2 \le n \le 194\,598$,$1 \le q \le 1\,049\,658$)——数组长度和询问数量。
第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le 5\,032\,107$)——数组的元素。
接下来的 $q$ 行,每行包含两个整数 $l_i$ 和 $r_i$($1 \le l_i < r_i \le n$)——每个询问的参数。
输出格式
输出 $q$ 行,每行一个答案,表示每个询问的结果,顺序与输入一致。
说明/提示
在第一个样例的第一个询问中,你可以将第二个数乘以 $7$ 得到 $259$,再将第三个数乘以 $37$ 得到 $1036$。此时 $a_2 \cdot a_3 = 268\,324 = 518^2$。
在第二个询问中,子数组已经是好的,因为 $a_4 \cdot a_6 = 24^2$。
在第三个询问中,你可以将 $50$ 除以 $2$ 得到 $25$。此时 $a_6 \cdot a_8 = 30^2$。
由 ChatGPT 4.1 翻译