1 条题解
-
0
G. D-函数 – 详细题解
问题描述
定义 为整数 的十进制各位数字之和。给定 ,求满足 且 的整数 的个数,答案对 取模。
关键观察
考虑一个正整数 的十进制表示 ()。乘以 后,数字和 与 的关系取决于乘法过程中是否发生进位。如果 乘以每一位数字的结果都小于 (即 ),则乘法不会产生进位,此时 的各位数字恰好就是 ,因此数字和满足 。反之,若有任何一位 使得 ,则进位会破坏这种线性关系,等式一般不成立。
因此,条件 等价于: 的每一位数字 都满足 ,即 。
记 。则允许的数字集合为 ,但首位(最高位)不能为 。
特殊情况
- 当 时,,允许的数字只有 ,但首位不能为 ,因此不存在满足条件的正整数 ,答案为 。
- 当 时,,所有数字 到 均允许,故任何 都满足条件。
- 当 时, 为 到 之间的某个正整数。
计数公式
的取值范围是 ,即 的十进制位数 满足 (因为 )。
对于固定的位数 :
- 最高位可取 ,共 种选择。
- 其余 位每位可取 ,共 种选择。
因此,位数为 的符合条件的数共有 个。
将所有位数求和:
$$\begin{aligned} \text{总数} &= \sum_{len = l+1}^{r} t \cdot (t+1)^{len-1} \\ &= t \cdot \sum_{j=l}^{r-1} (t+1)^{j} \quad (\text{令 } j = len-1) \\ &= t \cdot \frac{(t+1)^l\bigl((t+1)^{r-l} - 1\bigr)}{(t+1)-1} \\ &= (t+1)^l \bigl((t+1)^{r-l} - 1\bigr) \\ &= (t+1)^r - (t+1)^l. \end{aligned} $$因此,最终答案为:
$$\text{ans} = (t+1)^r - (t+1)^l, \qquad \text{其中 } t = \left\lfloor \frac{9}{k} \right\rfloor. $$当 时,,公式给出 ,与直接判断一致。
模运算与快速幂
由于 最大可到 ,指数极大,必须使用快速幂计算 和 ,其中 。注意答案须为正数,因此计算后取模并调整:
$$\text{ans} = \bigl( \text{pow}(t+1, r) - \text{pow}(t+1, l) + M \bigr) \bmod M. $$时间复杂度
每个测试用例 ,总复杂度 ,,完全可行。
示例验证
- 样例1: → ,,。正确。
- 样例2: → ,。正确。
- 样例3: → ,。正确。
- 样例4: → ,。正确。
总结
本题的核心在于发现 等价于 乘以 的每一位均不产生进位。由此将问题转化为数位计数,并利用等比数列求和公式得到简洁的闭式解,最后用快速幂计算。
- 1
信息
- ID
- 6982
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者