#287. 质数的填平(prime)

质数的填平(prime)

  • 文件输入:prime.in
  • 文件输出:prime.out
  • 时间限制:3s
  • 空间限制:512MB

题目描述

给定长度为 nn 的整数数组 a=[a1,a2,…,an]a = [a_1, a_2, \ldots, a_n]。对于 aa 的任意非空子序列 bb,可以执行以下操作任意次(包括零次):

  1. 选择一个质数 pp;
  2. 将 bb 中所有当前值能被 pp 整除的元素同时减 11,其余元素保持不变。

令 f(b)f(b) 为最大的整数 xx,使得存在某个操作序列,执行后 bb 中所有元素均等于 xx。

求所有非空子序列 bb 的 f(b)f(b) 之和,对 998 244 353998\,244\,353 取模:

$$\sum_{\substack{b \subseteq a \\ b \neq \varnothing}} f(b) \pmod{998\,244\,353}.$$

子序列按所选下标区分,即使元素值相同。每个子序列独立考虑,初始值取原数组中的对应值。

子序列定义: 若序列 aa 可由序列 bb 删除若干(可能为零个或全部)任意位置的元素得到,则称 aa 是 bb 的子序列。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数 tt。

每个测试用例的第一行包含一个整数 nn ——数组 aa 的长度。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n ——数组 aa 的元素。

输出格式

对于每个测试用例,输出一个整数——所有非空子序列 bb 的 f(b)f(b) 之和,对 998 244 353998\,244\,353 取模。

样例

4
1
1
4
2 4 4 4
4
2 3 4 4
6
3 6 1 1 1 1
1
37
34
72

说明/提示

样例解释

第一个测试用例中,唯一的非空子序列是 [1][1],无需操作,贡献为 f([1])=1f([1])=1。

第二个测试用例中,23−1=72^3-1=7 个仅由值 44 构成的非空子序列贡献 4⋅7=284 \cdot 7 = 28。子序列 [2][2] 贡献 22。每个同时包含值 22 和至少一个值 44 的 77 个子序列均有 f(b)=1f(b)=1。因此答案为 28+2+7=3728+2+7=37。

数据规模与约定

对于所有的数据,1≤t≤1041 \le t \le 10^4,1≤n≤300 0001 \le n \le 300\,000,1≤ai≤n1 \le a_i \le n,保证所有测试用例中 nn 的总和不超过 300 000300\,000。

子任务编号 分值 数据范围 特殊性质
11 1010 t≤10,n≤10t \le 10, n \le 10 无
22 t,n≤3000t,n \le 3000,所有测试用例的 nn 总和不超过 30003000 A
33 1515 无
1010 和所有数据的数据范围一样 A
44 5555 无

对于子任务 i(i>1)i(i \gt 1),你需要答对所有编号 <i\lt i 的子任务才能获得子任务 ii 的得分。

特殊性质 A:对于所有 1≤i≤n1 \le i \le n,均有 ai≤min⁡(n,10)a_i \le \min(n, 10)。

测试样例

一共 55 组测试样例。

primei.inprime\texttt{i}.in 和 primei.ansprime\texttt{i}.ans 对应子任务 ii。

点击下载 测试样例