号爸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