• jzoj5787更为优秀做法


    给出一个时间复杂度为(O(d(k)log_2nlog_2c(k)))(c)是质因数个数函数)的算法。
    原式就是(vk=prod a_i)(v,k)互质。
    (k)已经给出,设唯一分解为(p_1^{a_1}....p_n^{a_n})
    (v)(p_1,p_2...p_n)的指数必须是(0),其他任意。
    就是给(vk=s)钦定(n)个位置,它的第(i)个位置指数必须是(a_i),其他任意。
    考虑把(a_i)表示成(t*p_1^{b_1}...p_n^{b_n})的形式。
    则所有(a)(b_i)之和必须等于(a_i)
    (p_1^{b_1}...p_n^{b_n})视为向量((b_1,b_2...b_n))
    这显然可以dp。设(f_{i,j})表示确定(i)个数,乘积的向量为(j)
    (j)这一维只有(d(k))个有效状态。
    转移显然,但是我们要计算(p_1=s_1,p_2=s_2...p_n=s_n)的数的方案。
    考虑容斥,(p_1geq s_1,p_2geq s_2...p_ngeq s_n)显然是(frac{m}{p_1^{s_1}...p_n^{s_n}})
    (f_{(s_1,s_2...s_n)}=p_1=s_1,p_2=s_2...p_n=s_n)的方案,(g_{(s_1,s_2...s_n)}=frac{m}{p_1^{s_1}...p_n^{s_n}})
    高维差分即可。
    转移的过程可以被视为一个高维fwt(前缀和)的过程。
    fwt的运算视为向量的加法。
    实际上,dp的转移就是个fwt卷积,就是卷上(f)
    实际上就是个fwt的(n)次幂,可以对点值进行快速幂。
    点值快速幂后逆fwt后查询((a_1,a_2...a_n))的系数即可。

  • 相关阅读:
    (摘)Zebra打印机异常处理
    (摘)Chart Y轴设置为百分比
    关于ZFS、GPT、4K、Geom Label的一些说明
    (转)ASP.NET性能优化之分布式Session
    (转)WebService的事务处理
    SqlSever分页查询,仅扫描一次表
    (转)对.net系统架构改造的一点经验和教训
    字典树
    Ajax
    Lunix 命令
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/14538927.html
Copyright © 2020-2023  润新知