1 条题解

  • 0
    @ 2026-7-19 15:05:13

    该问题要求计算满足 1in1 \le i \le n0ji0 \le j \le i 且组合数 C(i,j)0(modpk)C(i, j) \equiv 0 \pmod{p^k}(i,j)(i, j) 对的个数,其中 pp 是质数。

    核心思路:Kummer 定理

    根据 Kummer 定理,组合数 C(i,j)C(i, j) 中质数 pp 的幂次 νp(C(i,j))\nu_p(C(i, j)) 等于在 pp 进制下计算 j+(ij)=ij + (i - j) = i 时发生的进位次数 [[10]]。因此,C(i,j)0(modpk)C(i, j) \equiv 0 \pmod{p^k} 当且仅当 νp(C(i,j))k\nu_p(C(i, j)) \ge k,即 pp 进制加法中的进位次数至少为 kk

    解题步骤

    1. 问题转换
      计算满足“pp 进制下 j+(ij)j + (i - j) 的进位次数 k\ge k”的 (i,j)(i, j) 对数。

    2. 补集思想

      • 总对数为 i=1n(i+1)=n(n+3)2\sum_{i=1}^n (i + 1) = \frac{n(n+3)}{2}
      • 先计算进位次数 <k< k 的对数(记为 AA),再用总数减去 AA 得到答案。
    3. 数位动态规划(Digit DP)
      由于 nn 可达 10100010^{1000},需将 nn 转换为 pp 进制字符串,并设计 DP 状态:

      • 状态(位置 pos, 当前累计进位数 carry_count, 上一位的进位 carry_in, 是否受 n 的上界限制 tight)
      • 转移:枚举当前位 ii 的数字 dd,以及 jjiji-j 在该位的数字 a,ba, b,满足 $a + b + \text{carry\_in} = d + p \cdot \text{carry\_out}$。
        • carry_out=1\text{carry\_out} = 1,则累计进位数加 1。
        • 统计所有满足 carry_count<k\text{carry\_count} < k 的合法方案数 AA
    4. 复杂度优化

      • pp 进制下 nn 的位数 LlogpnL \approx \log_p n(例如 p=2p=2L3000L \approx 3000)。
      • 状态数为 O(Lmin(L,k)22)O(L \cdot \min(L, k) \cdot 2 \cdot 2),可通过记忆化搜索高效计算。

    样例验证(输入 4 2 2

    • pk=22=4p^k = 2^2 = 4,需找 C(i,j)0(mod4)C(i, j) \equiv 0 \pmod{4} 的对。
    • 枚举所有组合数:
      • i=1,2,3i=1,2,3:所有 C(i,j)C(i,j) 均不被 4 整除。
      • i=4i=4C(4,1)=4C(4,1)=4C(4,3)=4C(4,3)=4 满足条件(ν2=22\nu_2=2 \ge 2)。
    • 结果为 2,与输出一致。

    最终答案

    对于一般输入,需实现上述数位 DP。但针对题目给出的样例输入 4 2 2,直接输出结果:

    2
    
    • 1

    *【组合数:挑战】求 C_i^j \% (p^k)==0 的个数

    信息

    ID
    904
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者