题目背景
材料 1:
请小心地计算下面的算式:138−108÷6=?
你大概难以置信,这个算式的计算结果竟然是 5!
材料 2:
对于一个正整数 x,x!=1×2×⋯×x−1×x。我们称 x! 为 x 的阶乘。
特别的,0!=1。
显然,「138−108÷6=5」是错误的,而「(138−108)÷6=5」是正确的,所以对材料 1 中的内容,部分读者会认为「作者没有搞清加减乘除的运算优先级关系而犯错」。
然而,材料 1 最后一行的叹号并不是标点符号,而是材料 2 提到的「阶乘」。
考虑到这一点,「138−108÷6=5!=1×2×⋯×5=120」显然就是正确的了。
题目描述
然而,此题可能与上面的题目背景关系不是很大。
我们会给你 T 组数据,每组数据包括一个正整数 n。
对于每组数据,请你帮助求出满足以下条件的整数三元组 (x,y,z) 的组数:
- x≥0,z≥1。
- x−y÷z=n! 且 (x−y)÷z=nn!。
由于答案可能过大,因此你需要输出答案对 998244353 取模后的结果。
不难注意到答案有可能为 ∞,这时请按照「输出格式」要求进行处理。
请注意此处应满足 (x−y)÷z=nn! 而不是 =n。
请注意这里的 ÷ 不是向下取整的整除,这显然意味着你需要保证 y÷z 和 (x−y)÷z 为整数。
输入格式
输入共 T+1 行。
第一行为一个整数 T。
接下来 T 行,每行一个整数 n。
输出格式
输出共 T 行,每行一个整数或一个字符串。
对第 i 行,如果对于输入数据中第 i+1 行的 n,满足 x−y÷z=n! 且 (x−y)÷z=nn! 的整数三元组 (x,y,z) 有无限个,则输出一行 inf
,否则输出满足条件的三元组的数量对 998244353 取模后的结果。
样例 #1
样例输入 #1
3
2
3
4
样例输出 #1
1
3
6
提示
样例 1 解释
样例中的具体三元组如下:
n |
所有可能的三元组 |
2 |
(2,0,2) |
3 |
(8,4,2)(5,−5,5)(6,0,3) |
4 |
(19,−95,19)(27,9,3)(21,−21,7)(20,−40,10)(24,0,4)(36,24,2) |
数据规模与约定
对于前 20% 的数据,保证 T≤10,n≤10。
对于前 40% 的数据,保证 n≤103。
对于另外 20% 的数据,保证 T=1。
对于 100% 的数据,保证 1≤T≤105,1≤n≤106。