• 对称多项式


    从这么一个式子开始说起 (F(x) = prod_{i=1}^n (1+a_i x))

    [egin{aligned} ln F(x) &= sum_{i=1}^n ln (1+a_ix)\ &= sum_{i=1}^n sum_{j>0} (-1)^{j-1}frac{a_i^j}{j}x^j\ &= sum_{j>0} (-1)^{j-1}frac{sum_{i=1}^n a_i^j}{j}x^j\ &= sum_{j>0} (-1)^{j-1}frac{e_j}{j}x^j\ end{aligned} ]

    如果 (e) 能够 (O(nlog n)), 那这个式子不就可以做到 (O(nlog n)) 了?

    定义 (e, p) 是作用在 ((a_1, a_2,cdots, a_n)) 上的函数

    [e_k = sum_{i=1}^n a_i^k\ p_k = sum_{ssubseteq 2^n, |s|=k} prod_{iin s} a_i]

    可以发现对(a)进行任意多次任意交换, 不影响上述两个式子的值, 这符合对称多项式的定义

    可以发现 (F(x))(p)(OGF)
    我们一开始的那段推导就给出了一个 : 已知 (e)(p)(O(nlog n)) 做法

    2017 thupc I Sum
    给你 (a_1cdots a_n), 求 (e_1cdots e_n)
    参考了一些网上的人的博客以及当时的官方题解, 似乎都是要两个 (log). 凉了...
    还是讲一下那题的做法吧, 用到一个已知 (p)(e)(O(nlog n)) 做法

    考虑用 (e_1 o e_{n-1}, p_1 o p_n) 去表示 (e_n)
    首先将 (x^n) 视作 (x^{n-1} * x), 碰运气用 (e_{n-1} * p_1), 此时有可能产生形如 (x^{n-1}y) 的项, 每种形式恰好一个
    然后将 (x^{n-1}y) 视作 (x^{n-2} * xy), 碰运气用 (e_{n-2} * p_2), 此时有可能产生形如 (x^{n-2}yz) 的项, 每种形式恰好一个
    接着将 (x^{n-2}yz) 视作 (x^{n-3} * xyz), 碰运用 (e_{n-3} * p_3). 依次类推...
    特别的, 到最后产生形如 (a_1a_2cdots a_n) 的项时, 就不是每种形式恰好一个了, 而是恰好 (n)

    容斥一下就是 (e_n = sum_{i=1}^{n-1} (-1)^{i-1} e_{n-i} p_i + (-1)^{n-1} np_n)
    写好看一点是 ((-1)^{n-1}e_n = sum_{i=1}^{n-1} ((-1)^{n-i} e_{n-i}) p_i + np_n)
    (i>n)(p_i=0), (e_i) 仍然满足上述等式.
    (e_0=p_0=0) 就可以多项式求逆做了.

    虽然 (p)(e) 之间的相互转化都可以 (O(nlog n))
    但是求 (p) 依赖于 (e), 求 (e) 又依赖于 (p), 我们得先算出其一
    (e) 在一般情况下比 (p) 难求得多, 那么这里我们就只能用分治FFT来求 (p)

    但是 (e) 在某些特殊情况下是能做到计算时间比 (p) 优的. 如在 (a_i=i) 时, 就不难想到伯努利数.

    [e^{dx} = sum_{i} frac{d^i}{i!}x^i\ e_k=k![x^k](sum_{d=0}^{n} e^{dx}) = [x^k]frac{e^{(n+1)x}-1}{e^x-1}]

    复杂度只与最大幂次有关, 与 (n)无关

    2017 集训队 多项式求和
    (f_0(x)=1, f_k(x)=sum_{i=0}^x (ai^2+bi+c)f_{k-1}(i))
    要求对于 (n(2e5), m(1e9)), 求出 (f_i(m),forall 0le i le n)

    构造多项式 (g_n(x))

    [egin{aligned} g_n(x) &= sum_{kge 0} f_k(n)x^k\ &= f_0(n) + sum_{kgt 0} (sum_{i=0}^n (ai^2+bi+c) f_{k-1}(i))x^k\ &= f_0(n) + (an^2+bn+c) sum_{kgt 0} f_{k-1}(n)x^k + sum_{kgt 0} (sum_{i=0}^{n-1} (ai^2+bi+c) f_{k-1}(i))x^k\ &= f_0(n) + (an^2+bn+c) sum_{kge 0} f_k(n)x^{k+1} + sum_{kgt 0} f_k(n-1)x^k\ &= (an^2+bn+c)x g_n(x) + g_{n-1}(x) + f_0(n) - f_0(n-1)\ end{aligned} ]

    这题里面 (f_0(n)-f_0(n-1) = 0)
    因此有 $$g_n(x) = frac{g_{n-1}(x)}{1-(an^2+bn+c)x}, g_0(x)=frac{1}{1-cx}$$
    (插个题外话 : (f_0(n)-f_0(n-1) eq 0)(mle 1e5) 时可以考虑分治FFT来补上这些项对答案的贡献)
    求出 (g_m) 的前 (n) 项系数即可, 问题转化为求 (prod_{i=1}^{m} 1-(ai^2+bi+c)xpmod {x^n})
    用文章最开头的方法去做, 转化为 (forall 0lt jle n, 求sum_{i=1}^m (ai^2+bi+c)^j)
    (a=0) 时可以直接二项式定理展开, 然后卷积求
    (a eq 0) 时类似这么做得到 (sum_{k=0}^j inom j k c^{j-k} sum_{d=0}^k inom k d b^{k-d} a^d sum_{i=1}^m i^{d+k})
    并不能比较快的求(可能我太菜)
    参考集训队论文里的方法:

    [egin{aligned} &sum_{i=1}^m (ai^2+bi+c)^j\ &=sum_{i=1}^m (a(i^2+frac b a i+frac c a))^j\ &令u=frac b {2a}, v = frac c a\ &=a^jsum_{i=1}^m (i^2+2ui+u^2+v-u^2)^j\ &=a^j sum_{k=0}^j inom k j (v-u^2)^{j-k} sum_{i=1}^m (i+u)^k\ end{aligned} ]

    后者是 (a=0) 的情况, 前后卷积一下即可

    参考资料

    wiki Symmetric Polynomial
    zzq's blog 初等对称轮换多项式简单应用

  • 相关阅读:
    Sublime_text3怎么运行php代码
    (转)解决png图片在IE6下不透明的方法
    CSS+JS下拉菜单和纯CSS下拉菜单
    笔记本开了WIFI之后只能上QQ,上不了网页的解决方法
    常见的浏览器兼容问题
    学习正则表达式
    (转)各种排序比较 直观动画
    find job
    mongodb 索引,全文索引与唯一索引
    再谈闭包,几个例子分析
  • 原文地址:https://www.cnblogs.com/acha/p/9048249.html
Copyright © 2020-2023  润新知