1 条题解

  • 0
    @ 2025-12-11 1:49:13

    题解:购买方案计数

    问题转化

    给定 N,G,LN, G, L,要求统计所有非空集合 S{1,2,,N}S \subseteq \{1,2,\dots,N\},满足:

    gcd(S)=G,lcm(S)=L\gcd(S) = G,\quad \mathrm{lcm}(S) = L

    对于每个询问 XX,求有多少个这样的集合 SS 包含 XX

    答案对 109+710^9+7 取模。

    关键推导

    1. 基本转化

    GLG \nmid L 则无解,答案为 00。 令 L=L/GL' = L/G,则问题转化为:选择若干个数 aia_i,使得:

    • aia_iGG 的倍数,即 ai=Gbia_i = G \cdot b_i
    • gcd{bi}=1\gcd\{b_i\} = 1
    • lcm{bi}=L\mathrm{lcm}\{b_i\} = L'
    • biN/Gb_i \le N/G

    即转化为 G=1G=1 的情况:在 [1,N][1, N'] 中选择若干数,gcd=1\gcd=1lcm=L\mathrm{lcm}=L'

    2. 因子分解

    L=p1e1p2e2pkekL' = p_1^{e_1} p_2^{e_2} \cdots p_k^{e_k},其中 pip_i 是质数。

    对每个质因子 pjp_j,选择的数集合 SS 中:

    • 至少有一个数的 pjp_j 指数为 00(保证 gcd=1\gcd=1
    • 至少有一个数的 pjp_j 指数为 eje_j(保证 lcm=L\mathrm{lcm}=L'
    • 每个数的 pjp_j 指数在 [0,ej][0, e_j] 之间

    3. 独立计数

    对于每个质因子 pjp_j,选择的数在 pjp_j 上的指数情况是独立的。 记 mj=ejm_j = e_j,对于每个数,它在 pjp_j 上的指数可以是 0,1,,mj0,1,\dots,m_j,但必须满足上述条件。

    设对于质因子 pjp_j,有 cjc_j 个数指数为 00djd_j 个数指数为 mjm_j,且 cj1c_j \ge 1dj1d_j \ge 1

    4. 总方案数

    先不考虑是否包含 XX,计算总合法集合数。

    M=N=N/GM = N' = N/G,需要 biMb_i \le M 且包含所有 LL' 的质因子条件。

    实际可选的数集合是 LL' 的约数集合中不超过 MM 的部分。

    令 $U = \{ d \mid d \text{ 是 } L' \text{ 的约数}, d \le M \}$。

    我们需要 SUS \subseteq USS \neq \varnothing,且满足对每个质因子 pjp_j

    • minxSvpj(x)=0\min_{x \in S} v_{p_j}(x) = 0
    • maxxSvpj(x)=mj\max_{x \in S} v_{p_j}(x) = m_j

    5. 容斥计算

    f(S)f(S) 为满足条件的集合数。

    用容斥:

    • 去掉“至少一个质因子不满足 min=0\min=0”的条件
    • 去掉“至少一个质因子不满足 max=mj\max=m_j”的条件

    AjA_j 表示“所有数的 pjp_j 指数都 1\ge 1”(即 min1\min \ge 1
    BjB_j 表示“所有数的 pjp_j 指数都 mj1\le m_j-1”(即 maxmj1\max \le m_j-1

    则合法集合 = 总非空集合 - 存在 jj 满足 AjA_j - 存在 jj 满足 BjB_j + 存在 j1,j2j_1,j_2 满足 Aj1A_{j_1}Bj2B_{j_2} 的交集 + ……

    6. 约数筛选

    对于每个子集 T{1,,k}T \subseteq \{1,\dots,k\},定义:

    • CTC_T:所有数的 pjp_j 指数 1\ge 1(对 jTj \in T)的限制下,可选的数的个数
    • DTD_T:所有数的 pjp_j 指数 mj1\le m_j-1(对 jTj \in T)的限制下,可选的数的个数

    实际 CTC_T 对应 LL' 的约数中,被 jTpj\prod_{j\in T} p_j 整除且 M\le M 的个数。
    DTD_T 对应 LL' 的约数中,不被 pjmjp_j^{m_j} 整除(对 jTj\in T)且 M\le M 的个数。

    7. 总方案公式

    F(T1,T2)F(T_1, T_2) 为满足“对 jT1j\in T_1,指数 1\ge 1;对 jT2j\in T_2,指数 mj1\le m_j-1”的数的个数。

    则合法集合数:

    $$\sum_{T_1 \subseteq [k]} \sum_{T_2 \subseteq [k]} (-1)^{|T_1|+|T_2|} \left(2^{F(T_1,T_2)} - 1\right) $$

    其中 [k]={1,,k}[k]=\{1,\dots,k\},且 T1,T2T_1,T_2 可能相交。

    8. 包含 XX 的方案数

    X=X/GX' = X/G,需要 XX' 是整数且 XLX' \mid L',否则答案为 00

    对每个询问 XX,需要计算包含 XX' 的合法集合数。

    固定 XX',对于其他数的选择,必须满足:

    • 集合整体 gcd=1\gcd=1lcm=L\mathrm{lcm}=L'
    • 包含 XX'

    XX' 的质因数指数为 rjr_j0rjmj0 \le r_j \le m_j)。

    则条件变为:

    • 对每个 jjmin(rj,其他数指数)=0\min(r_j, \text{其他数指数}) = 0
    • 对每个 jjmax(rj,其他数指数)=mj\max(r_j, \text{其他数指数}) = m_j

    即:

    • rj=0r_j = 0,则其他数中必须有指数 00(已满足),且必须有指数 mjm_j
    • rj=mjr_j = m_j,则其他数中必须有指数 00,且必须有指数 mjm_j(已满足)
    • 0<rj<mj0 < r_j < m_j,则其他数中必须有指数 00mjm_j

    9. 计算包含 XX' 的方案数

    S0={jrj=0}S_0 = \{j \mid r_j = 0\}
    Sm={jrj=mj}S_m = \{j \mid r_j = m_j\}
    Smid={j0<rj<mj}S_mid = \{j \mid 0 < r_j < m_j\}

    对于其他数 yy,必须满足:

    • jS0j \in S_0vj(y)0v_j(y) \ge 0(无限制),但必须有某个 yy 满足 vj(y)=mjv_j(y)=m_j
    • jSmj \in S_mvj(y)mjv_j(y) \le m_j(无限制),但必须有某个 yy 满足 vj(y)=0v_j(y)=0
    • jSmidj \in S_midvj(y)v_j(y) 任意,但必须有某个 yy 满足 vj(y)=0v_j(y)=0,且某个 yy 满足 vj(y)=mjv_j(y)=m_j

    用容斥计算不含 XX' 的其他数的选择方案数,再乘 11(固定 XX' 在集合中)。

    10. 实现简化

    由于 kω(L)8k \le \omega(L') \le 8(因为 L108L \le 10^8),可以 O(3k)O(3^k)O(4k)O(4^k) 枚举所有质因子条件状态,对每个状态预处理可选的数的个数。

    对每个询问 XX

    • 检查 GXG \mid XXLX' \mid L',否则输出 00
    • 根据 XX' 的指数向量,确定 S0,Sm,SmidS_0,S_m,S_mid
    • 用容斥计算其他数的选择方案数

    算法步骤

    1. 分解 L=L/GL' = L/G 的质因数 p1e1pkekp_1^{e_1} \cdots p_k^{e_k}
    2. 预处理 M=N/GM = N/G 以内所有 LL' 的约数,对每个约数记录其指数向量
    3. 预处理 cnt[mask]cnt[mask]:指数向量满足某些条件的约数个数(mask 表示每个质因子的指数是否满足某些条件)
    4. 对每个询问 XX
      • GXG \nmid X(X/G)L(X/G) \nmid L',输出 00
      • 计算 X=X/GX' = X/G 的指数向量 rr
      • 确定 S0,Sm,SmidS_0,S_m,S_mid
      • 用容斥计算其他数的选择方案数 waysways
      • 输出 waysways

    复杂度

    • 预处理:O(σ(L)k)O(\sigma(L') \cdot k),其中 σ(L)\sigma(L')LL' 的约数个数
    • 每个询问:O(3k)O(3^k)O(22k)O(2^{2k})
    • 由于 k8k \le 8,可过
    • 1

    信息

    ID
    6067
    时间
    1400ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者