其他分享
首页 > 其他分享> > 号爸2022暑假插班测试 D 解题报告

号爸2022暑假插班测试 D 解题报告

作者:互联网

给出两个整数 \(n, m\)。问有多少个长度为 \(n\) 的序列 \(A\),满足以下条件:
• \(1 ≤ A_i ≤ m(i = 1, 2, · · · , n)\)
• \(∀i ∈ [1, n − 1], A_{i+1}\) 是 \(A_i\) 的倍数。
由于答案可能很大,所以你只需要输出答案对 \(998244353\) 取模的结果。

例如: \(n = 3,m = 4\) 有 \(13\) 个符合条件的序列,分别是: \([1,1,1],[1,1,2],[1,1,3],[1,1,4],[1,2,2],[1,2,4],[1,3,3],[1,4,4],[2,2,2],[2,2,4],[2,4,4],[3,3,3],[4,4,4]\)。

分析:
考虑固定最后一个数,计算其贡献。

先举个例子。譬如,我们最后一个数是 \(6\)。
如果只有一个数,那只有一种情况: \([6]\)。
如果有两个数,第一个数可以取 \(6\) 的因子,有 \(4\) 种情况: \([1,6],[2,6],[3,6],[6,6]\)。
如果有三个数,那么第一个数可以取第二个数的因子,由于 \(1,2,3,6\) 分别由有 \(1,2,2,4\) 个因子,所以有 \(1+2+2+4=9\) 种情况。

考虑 \(6=2^1 \times 3^1\),前面的数都逃不开它的因数。尝试统计所有情况中 \(6\) 的每个因数在第一个数出现的次数。

\(n=1:\)

\(2^0\) \(2^1\)
\(3^0\) 0 0
\(3^1\) 0 1

\(n=2:\)

\(2^0\) \(2^1\)
\(3^0\) 1 1
\(3^1\) 1 1

\(n=3:\)

\(2^0\) \(2^1\)
\(3^0\) 4 2
\(3^1\) 2 1

发现这好像是前缀和的形式。

标签:第一个,因数,情况,因子,解题,2022,序列,插班
来源: https://www.cnblogs.com/Zeardoe/p/16414706.html