1 条题解

  • 0
    @ 2026-9-3 11:10:58

    题解

    思路推导

    从 ii 个不同元素中选出 jj 个并排成一个环,先排成线性序列再消去旋转的重复,可得

    C(i,j)=i(i−1)⋯(i−j+1)j。C(i,j)=\frac{i(i-1)\cdots(i-j+1)}{j}。

    长度为 jj 的连续整数中恰有一个数在模 jj 意义下为 00。把这个数中的因子 jj 与分母约去后,其余 j−1j-1 个因子在模 jj 意义下恰为 1,2,…,j−11,2,\ldots,j-1,于是

    $$C(i,j)\bmod j=\left((j-1)!\left\lfloor\frac{i}{j}\right\rfloor\right)\bmod j。$$

    若 jj 是大于 44 的合数,则 (j−1)!(j-1)! 含有足够的质因子使其被 jj 整除;唯一的合数例外是 j=4j=4。若 j=pj=p 为质数,由 Wilson 定理有 (p−1)!≡−1(modp)(p-1)!\equiv-1\pmod p。因此只有质数和 44 会产生非零贡献。

    做法

    先用筛法求出不超过最大询问值的所有质数。对于每个质数 pp,当 ii 位于区间 [kp,(k+1)p−1][kp,(k+1)p-1] 时,它对当前内层和的贡献恒为

    (−k) mod p=(p−(k mod p)) mod p。(-k)\bmod p=(p-(k\bmod p))\bmod p。

    在差分数组上对这些整段区间做加法。j=4j=4 时的贡献为 (2⌊i/4⌋) mod 4(2\lfloor i/4\rfloor)\bmod4,同样按长度为 44 的区间加入差分数组。

    对差分数组做一次前缀和,可得每个 ii 的内层和;再做一次前缀和即可得到所有询问的答案。

    正确性证明

    上述约分说明,对任意 i,ji,j,原式中的一项等于 ((j−1)!⌊i/j⌋) mod j((j-1)!\lfloor i/j\rfloor)\bmod j。合数阶乘整除性质和 Wilson 定理又说明,除质数与 44 外的所有 jj 的贡献均为零,而算法对质数与 44 计算的区间常值恰等于该式。因此第一次前缀和得到的正是固定 ii 的全部 jj 项之和。第二次前缀和把 i=1i=1 到询问值 nn 的这些内层和相加,故输出等于题目所求。

    复杂度分析

    设最大询问值为 NN。筛法复杂度为 O(Nlog⁡log⁡N)O(N\log\log N);所有质数的分段更新总数为 O(Nlog⁡log⁡N)O(N\log\log N)。总时间复杂度为 O(Nlog⁡log⁡N+t)O(N\log\log N+t),空间复杂度为 O(N)O(N)。

    • 1

    信息

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