zoukankan      html  css  js  c++  java
  • 多项式学习记录

    进度可见 pastebin

    分治卷积

    考虑分治

    [f_i=sum_{mid}sum_{j=l}^{mid}f_j imes g_{i-j} ]

    防止 (l) 前的元素的干扰,截取有效部分做卷积。

    时间复杂度 (Theta (nlog^2n))

    void solve(int l, int r) {
      if (l == r) 
        return;
      int mid = (l + r) >> 1;
      solve(l, mid);
      for (int i = 0; i <= r - l; i++)
        A[i] = B[i] = 0; 
      for (int i = 0; i <= mid - l; ++i)
        A[i] = f[i + l];
      for (int i = 0; i <= r - l; ++i)
        B[i] = g[i];
      DFT(A, r - l + 1), DFT(B, r - l + 1);
      for (int i = 0; i <= r - l; ++i)
        A[i] = (ll)A[i] * B[i] % mod;
      IDFT(A, r - l + 1);
      for (int i = mid + 1; i <= r; ++i)
        f[i] = (f[i] + A[i - l]) % mod; 
      solve(mid + 1, r);
    }
    

    多项式乘法逆

    [A imes Bequiv mathbf 1 (mathrm{mod}; x^n) ]

    考虑分治,已知 (B')

    [A imes B'equivmathbf 1(mathrm {mod} ;x^frac n2) ]

    [A imes (B-B')equiv mathbf 0(mathrm{mod} ; x^frac n2) ]

    [B-B'equiv mathbf 0(mathrm {mod}; x^frac n2) ]

    [B^2-2B imes B'+B'^2equiv mathbf 0(mathrm {mod} ; x^n) ]

    [B-2B'+AB'^2equiv mathbf 0(mathrm {mod} ; x^n) ]

    [Bequiv2B'-AB'^2 ]

    时间复杂度 (mathcal O(mathrm {nlogn}))

    poly inv(poly a, int n) {
      a.resize(n); 
      if (n == 1) 
        return poly(1, Inv(a[0], p));
      else {
        poly b = inv(a, n + 1 >> 1);
        b = b * (2 - a * b); 
        b.resize(n); 
        return b; 
      }
    }
    

    多项式对数函数

    [B(x)equiv ln(A(x)) (mathrm {mod} ; x^n) ]

    考虑对等式两遍进行求导,右边链式法则求导

    [B'(x)equiv frac {A'(x)}{A(x)} ]

    然后两边分别积分即可

    时间复杂度为 (mathcal O(mathrm {nlogn}))

    poly derivative(poly a) {
      poly res(a.size() - 1); 
      for (unsigned i = 0; i < res.size(); ++i) res[i] = (long long)a[i + 1] * (i + 1) % p;
      return res; 
    }
    
    poly integral(poly a) {
      poly res(a.size() + 1, 0);
      for (unsigned i = 1; i < res.size(); ++i) res[i] = (long long)a[i - 1] * Inv(i) % p; 
      return res; 
    }
    
    poly ln(poly a) {
      poly res = integral(~a * derivative(a)); 
      res.resize(a.size()); 
      return res; 
    }
    
  • 相关阅读:
    mysql常用基本命令
    mysql8.0.13下载与安装图文教程
    k8s ingress 增加跨域配置
    Jenkins 备份恢复插件 thinBackup 使用
    k8s HA master 节点宕机修复
    nginx 跨域问题解决
    mongodb 3.4.24 主从复制
    k8s 线上安装 jenkins并结合 jenkinsfile 实现 helm 自动化部署
    k8s helm 运用与自建helm仓库chartmuseum
    centos6 源码安装 unzip
  • 原文地址:https://www.cnblogs.com/chhokmah/p/12642306.html
Copyright © 2011-2022 走看看