1 条题解

  • 0
    @ 2026-5-6 14:38:58

    G. D-函数 – 详细题解

    问题描述

    定义 D(n)D(n) 为整数 nn 的十进制各位数字之和。给定 l,r,kl, r, k,求满足 10ln<10r10^{l} \le n < 10^{r}D(kn)=kD(n)D(k \cdot n) = k \cdot D(n) 的整数 nn 的个数,答案对 109+710^{9}+7 取模。

    关键观察

    考虑一个正整数 nn 的十进制表示 n=dm1dm2d0n = \overline{d_{m-1} d_{m-2} \dots d_0}dm10d_{m-1} \neq 0)。乘以 kk 后,数字和 D(kn)D(k \cdot n)kD(n)k \cdot D(n) 的关系取决于乘法过程中是否发生进位。如果 kk 乘以每一位数字的结果都小于 1010(即 kdi<10k \cdot d_i < 10),则乘法不会产生进位,此时 knk \cdot n 的各位数字恰好就是 kdik \cdot d_i,因此数字和满足 D(kn)=kD(n)D(k \cdot n) = k \cdot D(n)。反之,若有任何一位 did_i 使得 kdi10k \cdot d_i \ge 10,则进位会破坏这种线性关系,等式一般不成立。

    因此,条件 D(kn)=kD(n)D(k \cdot n) = k \cdot D(n) 等价于:nn 的每一位数字 dd 都满足 kd<10k \cdot d < 10,即 d9kd \le \lfloor \frac{9}{k} \rfloor

    t=9kt = \lfloor \frac{9}{k} \rfloor。则允许的数字集合为 {0,1,2,,t}\{0, 1, 2, \dots, t\},但首位(最高位)不能为 00

    特殊情况

    • k10k \ge 10 时,t=0t = 0,允许的数字只有 00,但首位不能为 00,因此不存在满足条件的正整数 nn,答案为 00
    • k=1k = 1 时,t=9t = 9,所有数字 0099 均允许,故任何 nn 都满足条件。
    • 1<k<101 < k < 10 时,tt1199 之间的某个正整数。

    计数公式

    nn 的取值范围是 10ln<10r10^{l} \le n < 10^{r},即 nn 的十进制位数 lenlen 满足 l+1lenrl+1 \le len \le r(因为 10len1n<10len10^{len-1} \le n < 10^{len})。

    对于固定的位数 lenlen

    • 最高位可取 1,2,,t1, 2, \dots, t,共 tt 种选择。
    • 其余 len1len-1 位每位可取 0,1,,t0, 1, \dots, t,共 t+1t+1 种选择。

    因此,位数为 lenlen 的符合条件的数共有 t(t+1)len1t \cdot (t+1)^{len-1} 个。

    将所有位数求和:

    $$\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. $$

    k10k \ge 10 时,t=0t=0,公式给出 1r1l=01^r - 1^l = 0,与直接判断一致。

    模运算与快速幂

    由于 l,rl, r 最大可到 10910^9,指数极大,必须使用快速幂计算 (t+1)lmodM (t+1)^l \bmod M(t+1)rmodM(t+1)^r \bmod M,其中 M=109+7M = 10^9+7。注意答案须为正数,因此计算后取模并调整:

    $$\text{ans} = \bigl( \text{pow}(t+1, r) - \text{pow}(t+1, l) + M \bigr) \bmod M. $$

    时间复杂度

    每个测试用例 O(logr)O(\log r),总复杂度 O(tlogr)O(t \log r)t104t \le 10^4,完全可行。

    示例验证

    • 样例1:l=0,r=1,k=4l=0, r=1, k=4t=9/4=2t=\lfloor9/4\rfloor=2t+1=3t+1=33130=31=23^1-3^0=3-1=2。正确。
    • 样例2:l=0,r=2,k=7l=0, r=2, k=7t=1t=12220=41=32^2-2^0=4-1=3。正确。
    • 样例3:l=1,r=2,k=1l=1, r=2, k=1t=9t=9102101=10010=9010^2-10^1=100-10=90。正确。
    • 样例4:l=1,r=2,k=3l=1, r=2, k=3t=3t=34241=164=124^2-4^1=16-4=12。正确。

    总结

    本题的核心在于发现 D(kn)=kD(n)D(kn)=kD(n) 等价于 kk 乘以 nn 的每一位均不产生进位。由此将问题转化为数位计数,并利用等比数列求和公式得到简洁的闭式解,最后用快速幂计算。

    • 1

    信息

    ID
    6982
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者