CFCF2183E.LCM is Legendary Counting Master

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个长度为 nn 的序列 aa 和一个正整数 mm。序列 aa 的每个元素都是 [0,m][0, m] 范围内的整数。

当且仅当以下两个条件都满足时,序列 aa 被认为是好的:

  • a1<a2<a3<<ana_1 < a_2 < a_3 < \ldots < a_n
  • 1lcm(a1,a2)+1lcm(a2,a3)++1lcm(an1,an)+1lcm(an,a1)1\frac{1}{\operatorname{lcm}(a_1,a_2)}+\frac{1}{\operatorname{lcm}(a_2,a_3)}+\ldots+ \frac{1}{\operatorname{lcm}(a_{n-1},a_n)}+{\color{red}\frac{1}{\operatorname{lcm}(a_n,a_1)}}\ge 1^{\text{∗}}

你需要将序列 aa 中所有的零替换成 [1,m][1, m] 范围内的整数。求有多少种不同的替换方式,使得最终的序列 aa 是好的。

请输出答案对 998244353998\,244\,353 取模。

^{\text{∗}} 两个正整数的最小公倍数(lcm\operatorname{lcm})是同时被两个数整除的最小正整数。例如,lcm(2,3)=6,lcm(4,6)=12\operatorname{lcm}(2,3)=6,\, \operatorname{lcm}(4,6)=12

输入格式

每组测试数据包含多组测试用例。第一行为测试用例数 tt1t10001 \le t \le 1000)。接下来为每组测试用例的描述。

每个测试用例的第一行包含两个整数 nnmm2nm30002 \le n \le m \le 3000)。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n0aim0 \le a_i \le m)。

保证所有测试用例中 mm 的总和不超过 30003000

输出格式

对于每个测试用例,输出一个整数——将序列补全并使其变为好序列的方案数,答案对 998244353998\,244\,353 取模。

输入输出样例

  • 输入#1

    5
    4 6
    1 0 0 6
    2 2
    2 1
    5 24
    0 0 4 0 0
    5 6
    0 0 6 0 0
    20 2000
    1 0 0 0 0 14 0 0 0 0 0 0 0 0 0 514 0 0 0 0

    输出#1

    2
    0
    10
    0
    973702700

说明/提示

在第一个测试用例中,有 22 种方式可以替换零,使得序列变为好序列:

  • [1,2,3,6][1, 2, 3, 6]:此时和为 1lcm(1,2)+1lcm(2,3)+1lcm(3,6)+1lcm(6,1)=12+16+16+16=1\frac{1}{\operatorname{lcm}(1, 2)} + \frac{1}{\operatorname{lcm}(2, 3)} + \frac{1}{\operatorname{lcm}(3, 6)} + \frac{1}{\operatorname{lcm}(6, 1)} = \frac{1}{2} + \frac{1}{6} + \frac{1}{6} + \frac{1}{6} = 1
  • [1,2,4,6][1, 2, 4, 6]:此时和为 1lcm(1,2)+1lcm(2,4)+1lcm(4,6)+1lcm(6,1)=12+14+112+16=1\frac{1}{\operatorname{lcm}(1, 2)} + \frac{1}{\operatorname{lcm}(2, 4)} + \frac{1}{\operatorname{lcm}(4, 6)} + \frac{1}{\operatorname{lcm}(6, 1)}= \frac{1}{2} + \frac{1}{4} + \frac{1}{12} + \frac{1}{6} = 1

在第二个测试用例中,初始序列为 [2,1][2, 1]。由于 212 \not< 1,严格递增的条件不成立,所以答案为 00

在第四个测试用例中,初始序列为 [0,0,6,0,0][0, 0, 6, 0, 0]m=6m=6,第三个元素是 66。由于序列必须严格递增且元素不能超过 66,会需要 6<a4<a566<a_4<a_5\le 6,这是不可能的。

首页