1 条题解

  • 0
    @ 2026-4-16 10:52:24

    Divisor Paths 题解(浓缩版)

    核心转化

    D=p1a1pkakD = p_1^{a_1}\cdots p_k^{a_k},每个因子对应指数向量 (b1,,bk)(b_1,\dots,b_k)
    边连接指数向量相差一个单位(单维 ±1\pm1),边权 w=τ(x)τ(y)w = \tau(x)-\tau(y),其中 τ(x)=(bi+1)\tau(x)=\prod(b_i+1)

    关键结论

    对于询问 (v,u)(v,u),设 g=gcd(v,u)g = \gcd(v,u),指数 gi=min(vi,ui)g_i = \min(v_i,u_i)

    1. 最短路径长度 =τ(v)+τ(u)2τ(g)= \tau(v) + \tau(u) - 2\tau(g)
    2. 所有最短路径 必须先下降vgv \to g)再上升gug \to u
    3. 路径计数
      • 下降:需减少 di=vigid_i = v_i - g_i 步,方案数 =(di)!di!= \dfrac{(\sum d_i)!}{\prod d_i!}
      • 上升:需增加 ei=uigie_i = u_i - g_i 步,方案数 =(ei)!ei!= \dfrac{(\sum e_i)!}{\prod e_i!}
      • 答案 $= \dfrac{(\sum d_i)!}{\prod d_i!} \cdot \dfrac{(\sum e_i)!}{\prod e_i!} \pmod{998244353}$

    算法步骤

    1. 质因数分解 DD,得素数 pip_i 及最大指数 aia_i
    2. 预处理阶乘和逆元到 Smax=ai60S_{\max} = \sum a_i \le 60
    3. 每个询问:
      • 对每个 pip_i,计算 v,uv,u 中的指数 vi,uiv_i,u_i
      • di=max(0,viui)d_i = \max(0, v_i-u_i)ei=max(0,uivi)e_i = \max(0, u_i-v_i)
      • 计算 Sd=diS_d = \sum d_iSe=eiS_e = \sum e_i
      • 输出 $fact[S_d] \cdot fact[S_e] \cdot \prod inv\_fact[d_i] \cdot \prod inv\_fact[e_i]$

    复杂度

    • 分解 O(D)O(\sqrt{D}) 或 Pollard-Rho
    • 每个询问 O(k)O(k)k15k \le 15q3×105q \le 3\times10^5
    • 1

    信息

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