P1025万象启星环circum

时间限制 2500 ms内存限制 512 MiB通过率 —
显示算法标签动态规划 · 矩阵快速幂 · 数论

【题目背景】

越过万山的货物终于抵达星尘镇,其中装载着修复古老防护装置星环所需的全部部件。tfbz 与 Ehundategh 完成装配后,还需要按照星环留下的规则注入能量,才能让它重新照亮整座城镇。

【题目描述】

启动星环需要依次完成 nn 次能量注入。第 ii 次注入时,可以从 11mm 中选择一个整数 xix_i 作为本次注入的能量值;全部注入结束后,依次选择的能量值形成一个长度为 nn 的有序序列 (x1,x2,,xn)(x_1,x_2,\cdots,x_n)

星环具有固定的能量周期 pp。每次注入的能量都会沿着星环向前传递;如果 i=1nxi\sum_{i=1}^{n}x_i 不是 pp 的倍数,最后留下的能量便无法与最初的能量衔接,整次循环也会因此中断。

仅仅让能量完成循环仍不足以启动星环。沉睡的核心必须由质数能量唤醒:如果 x1,x2,,xnx_1,x_2,\cdots,x_n 中没有任何一个质数,即使能量顺利循环,星环依然不会发出光芒。

因此,tfbz 需要依次从 11mm 中选择 nn 个能量值,使它们的总和是 pp 的倍数,并保证其中至少有一个质数。星环将每一种能够成功启动核心的有序注入方案记录为一个启星序列;只要某一次注入的能量值不同,或相同能量值出现的次序不同,就会被记录为不同的方案。

tfbz 想知道,一共有多少个不同的启星序列。由于答案可能很大,请将答案对 998,244,353998{,}244{,}353 取模后输出。

【输入格式】

从文件 circum.in\textbf{\textit{circum.in}} 中读入数据。

第一行一个正整数 TT,表示测试数据的组数。

对于每组测试数据,一行三个正整数 n,m,pn,m,p,分别表示能量注入次数、每次注入的最大能量值和星环的能量周期。

【输出格式】

输出到文件 circum.out\textbf{\textit{circum.out}} 中。

对于每组测试数据,输出一行一个整数,表示启星序列的数量对 998,244,353998{,}244{,}353 取模后的结果。

【样例 1 输入】

33 5 32 2 11 1 1

【样例 1 输出】

3330

【说明/提示】

【样例 2】

见选手目录下的 circum/circum2.in\textbf{\textit{circum/circum2.in}}circum/circum2.ans\textbf{\textit{circum/circum2.ans}}

该组样例符合测试点 141\sim 4 的数据范围。

【样例 3】

见选手目录下的 circum/circum3.in\textbf{\textit{circum/circum3.in}}circum/circum3.ans\textbf{\textit{circum/circum3.ans}}

该组样例符合测试点 585\sim 8 的数据范围。

【样例 4】

见选手目录下的 circum/circum4.in\textbf{\textit{circum/circum4.in}}circum/circum4.ans\textbf{\textit{circum/circum4.ans}}

该组样例符合测试点 9149\sim 14 的数据范围。

【样例 5】

见选手目录下的 circum/circum5.in\textbf{\textit{circum/circum5.in}}circum/circum5.ans\textbf{\textit{circum/circum5.ans}}

该组样例符合测试点 152015\sim 20 的数据范围。

【数据范围】

对于 100%100\% 的数据,保证:1T101\leq T\leq 101n1091\leq n\leq 10^91m2×1071\leq m\leq 2\times 10^71p1001\leq p\leq 100,单个测试点内 m2×107\sum m\leq 2\times 10^7

测试点编号nnmmpp
141\sim 4100\leq 100100\leq 100100\leq 100
585\sim 8109\leq 10^9100\leq 100100\leq 100
9149\sim 14109\leq 10^9106\leq 10^6100\leq 100
152015\sim 20109\leq 10^92×107\leq 2\times 10^7100\leq 100

【题解】

已公开 1 篇题解,官方题解会优先显示。

查看题解