1 条题解

  • 0
    @ 2025-11-4 8:27:49

    题目重述

    从区间 [L,H][L, H] 中选取 NN 个整数(可重复),求这些数的最大公约数恰好为 KK 的方案数,结果对 109+710^9+7 取模。

    关键思路

    问题转换

    设选出的数为 a1,a2,,aNa_1, a_2, \dots, a_N,则 gcd(a1,,aN)=K\gcd(a_1, \dots, a_N) = K 等价于:

    所有 aia_i 都是 KK 的倍数

    bi=ai/Kb_i = a_i / K,则 gcd(b1,,bN)=1\gcd(b_1, \dots, b_N) = 1

    区间变换

    令:l=L/Kl' = \lceil L/K \rceil, h=H/Kh' = \lfloor H/K \rfloor 如果 l>hl' > h',则没有符合条件的数,答案为 00

    否则,问题转化为:在区间 [l,h][l', h'] 中选 NN 个整数 x1,,xNx_1, \dots, x_N,使得 gcd(x1,,xN)=1\gcd(x_1, \dots, x_N) = 1 的方案数。

    容斥原理与莫比乌斯反演

    定义函数

    F(d)F(d) 表示 gcd\gcddd 的倍数 的方案数。

    区间 [l,h][l', h']dd 的倍数的个数为: $\text{cnt}(d) = \left\lfloor \frac{h'}{d} \right\rfloor - \left\lceil \frac{l'}{d} \right\rceil + 1$

    即: $\text{cnt}(d) = \frac{h'}{d} - \frac{l'+d-1}{d} + 1$

    因此: F(d)=(cnt(d))NF(d) = (\text{cnt}(d))^N

    莫比乌斯反演

    f(d)f(d) 表示 gcd\gcd 恰好等于 dd 的方案数。

    f(d)f(d) 表示 gcd\gcd 恰好等于 dd 的方案数。

    那么: F(d)=dmf(m)F(d) = \sum_{d|m} f(m)

    由莫比乌斯反演: f(d)=dmμ(m/d)F(m)f(d) = \sum_{d|m} \mu(m/d)F(m)

    我们要求的是 f(1)f(1),即: f(1)=m=1hμ(m)F(m)f(1) = \sum_{m=1}^{h'} \mu(m)F(m)

    算法实现

    代码思路

    1.预处理:计算 l=L/Kl' = \lceil L/K \rceilh=H/Kh' = \lfloor H/K \rfloor

    2.特殊情况:如果 l>hl' > h',输出 00

    3.计算 F(d)F(d):对于每个 dd,计算区间内 dd 的倍数的个数 xx,然后 f[d]=xNxf[d] = x^N - x(减去所有数相同的情况)

    4.容斥计算:从大到小枚举 dd,减去 f[j]f[j](其中 jjdd 的倍数)

    5.特殊处理:如果 l=1l' = 1,加上所有数都取 11 的情况

    复杂度分析

    区间长度 hl105h' - l' \leq 10^5,循环在 O((hl)log(hl))O((h'-l') \log (h'-l')) 内完成,可以接受。

    总结

    本题通过除以 KK 将问题转化为 gcd=1\gcd=1 的情况,利用区间倍数个数和容斥原理(或莫比乌斯反演)求解,能够高效处理 HL105H-L \leq 10^5 的大范围 N,KN,K 情况。

    • 1

    信息

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