首页 > 其他分享 >多项式基础

多项式基础

时间:2024-01-14 13:33:44浏览次数:31  
标签:frac pmod 多项式 基础 cdot mathcal equiv

FFT/NTT

板子,就不说了。

分治 FFT

给定序列 \(g_{1\dots n - 1}\),求序列 \(f_{0\dots n - 1}\)。其中 \(f_i=\sum_{j=1}^if_{i-j}g_j\),边界为 \(f_0=1\)。

Solution 1

朴素地做是 \(\mathcal{O}(n^2)\) 的。观察到后面的项依赖前面的项。于是我们可以考虑用 cdq 分治实现。

具体地

  • 若 \(l=r\),结束递归。

  • 递归求解 \([l,mid]\)

  • 计算 \([l,mid]\) 对 \([mid+1,r]\) 的影响。

  • 求解 \([mid+1,r]\)。

\([l,mid]\) 对 \(f_i, i\in [mid+1,r]\) 的影响为 \(\sum _{j=l}^{mid} f_jg_{i-j}\)。

观察到这是一个卷积的形式。于是我们令 \(a_i=f_{l+i}\),\(b_i=g_i\),则计算出 \(c=a\ast b\),\([l,mid]\) 对 \([mid+1,r]\) 中 \(i\) 的贡献为 \(c_{i-l}\)。

时间复杂度 \(\mathcal{O}(n\log^2 n)\)。

Solution 2

令 \(F(x),g(x)\) 为 \(f,g\) 的生成函数。

则 \(F(x)G(x)=\sum_{i=0}^{+\infty} x^i\sum_{j+k=i}f_jg_k=F(x)-1\)。

故 \(F(x)=\frac{1}{1-G(x)}\)。

时间复杂度 \(\mathcal{O}(n\log n)\)。

任意模数多项式乘法(MTT)

Method 1:三模 NTT

由于 \(p\leq 10^9+9\),\(n,m\leq 10^5\),故最大的数可以到 \(p^2\cdot n=10^{23}\)(默认 \(n,m\) 同阶)级,故我们需要选取三个大素数使得 \(p_1p_2p_3\gt 10^{23}\)。

一般选取 \(p_1=496,762,049\),\(p_2=998,422,353\),\(p_3=1,004,535,809\),它们都存在原根 \(G=3\)。我们求出后可以利用 CRT 求出答案(需要利用 __int128)。

不过这个方法常数很大(需要做 \(9\) 次 NTT/INTT)。

Method 2:拆系数 FFT

我们设 \(c\) 是一个 \(\sqrt{p}\) 左右级别的整数。那么我们可以将 \(F(x)\) 拆成 \(A(x)+c\cdot B(x)\)。其中 \([x^i]A(x)=[x^i]F(x)\bmod c\),\(\displaystyle [x^i]B(x)=\lfloor\frac{[x^i]F(x)}{c}\rfloor\)。这样可以将系数降到 \(10^5\) 级别。

于是设 \(F(x)=A(x)+c\cdot B(x)\),\(G(x)=C(x)+c\cdot D(x)\),于是 \(F(x)G(x)=A(x)C(x)+c\left[A(x)D(x)+B(x)C(x)\right]+c^2\cdot B(x)D(x)\)。

设 \(T(x)=C(x)+D(x)\cdot \mathrm{i}\),其中 \(\mathrm i\) 为复数单位。于是我们可以在 \(A(x)\cdot T(x)\) 中找到 \(A(x)C(x)\) 和 \(A(x)D(x)\),在 \(B(x)\cdot T(x)\) 中找到 \(B(x)C(x)\) 和 \(B(x)D(x)\)。

于是我们需要:

  • 对 \(A(x)\),\(B(x)\),\(T(x)\) 做 DFT

  • 对 \(A(x)T(x)\),\(B(x)T(x)\) 做 IDFT

共五次 FFT。常数是三模 NTT 的一半左右。

多项式乘法逆

考虑倍增。假设我们求出了 \(G_0(x)\) 使得 \(F(x)\cdot G_0(x)\equiv 1\pmod {x^n}\),我们考虑求出 \(G(x)\) 使得 \(F(x)\cdot G(x)\equiv 1\pmod {x^{2n}}\)。

由于 \(F(x)\cdot G(x)\equiv 1\pmod {x^{\textcolor{red}{2n}}}\),所以必有 \(F(x)\cdot G(x)\equiv 1\pmod {x^{\textcolor{red}{n}}}\)。于是我们有

\[F(x)\cdot G(x)\equiv F(x)\cdot G_0(x)\pmod {x^n} \]

则 \(F(x)\) 可消去,得到

\[G(x)-G_0(x)\equiv 0\pmod {x^n} \]

\[G^2(x)-2G(x)G_0(x)+G_0^2(x)\equiv 0\pmod {x^{2n}} \]

考虑到 \(F(x)\cdot G(x)\equiv 1\),则两边同乘 \(F(x)\)

\[G(x)-2G_0(x)+F(x)G_0^2(x)\equiv 0\pmod {x^{2n}} \]

则 \(G(x)\equiv G_0(x)(2-F(x)G(x))\pmod {x^{2n}}\)。于是可以倍增求出。

我们有 \(T(n)=T(\frac{n}{2})+\mathcal{O}(n\log n)\),则时间复杂度为 \(\mathcal{O}(n\log n)\)。(但是你猜猜常数有多少?)

任意模数多项式乘法逆

把 NTT 换成任意模数的即可。

多项式对数函数

对 \(G(x)\equiv \ln F(x) \pmod {x^n}\) 的两边求导,得

\[G'(x)\equiv \frac{F'(x)}{F(x)} \pmod {x^n} \]

于是

\[G(x)\equiv \int \frac{F'(x)}{F(x)} \pmod {x^n} \]

时间复杂度 \(\mathcal{O}(n\log n)\)。

多项式 Newton 迭代

给定多项式 \(g(x)\),若已知 \(f(x)\) 满足 \(g(f(x))=0\),求出模 \(x^n\) 意义下的 \(f(x)\)。

考虑倍增。

边界是 \(n=1\),此时需要单独解出 \([x^0]g(f(x))=0\) 的解。

设已经得到了模 \(x^{\lceil\frac{x}{2}\rceil}\) 下的解 \(f_0(x)\)。

对 \(g(x)\) 在 \(f_0(x)\) 处进行 Taylor 展开,其中 \(g^{(i)}\) 表示对 \(g\) 求 \(i\) 阶导数,规定 \(g^{(0)}=g\)。

\[\sum_{i=0}^{+\infty }\frac{g^{(i)}(f_0(x))}{i!} (f(x)-f_0(x))^i\equiv 0\pmod {x^n} \]

\(f(x)-f_0(x)\) 最低的非零项系数为 \(x^{\lceil\frac{n}{2}\rceil}\)。那么当 \(i\geq 2\) 时,\(2\lceil\frac{n}{2}\rceil\geq n\),在模 \(x^n\) 意义下为 \(0\),亦即,\(\forall i\geq 2\),都有 $ (f(x)-f_0(x))^i\equiv 0\pmod {x^n}$。

那么就很好做了。上式可以化简成

\[g(f_0(x))+g'(f_0(x))\cdot (f(x)-f_0(x))\equiv 0\pmod {x^n} \]

于是不难解得

\[f(x)\equiv f_0(x)-\frac{g(f_0(x))}{g'(f_0(x))}\pmod {x^n} \]

那么我们不妨再来回顾一下多项式求逆。

给定 \(h(x)\),求出 \(f(x)\),使得 \(h(x)\cdot f(x)\equiv 1\pmod {x^n}\)。

观察牛顿迭代的形式

给定多项式 \(g(x)\),若已知 \(f(x)\) 满足 \(g(f(x))=0\),求出模 \(x^n\) 意义下的 \(f(x)\)。

我们要让左边是一个多项式,右边是 \(0\)。我们考虑变一下形。

\[h(x)\cdot f(x)\equiv 1\pmod {x^n} \]

\[h(x)\cdot f(x)-1\equiv 0\pmod {x^n} \]

\[h(x)-\frac{1}{f(x)}\equiv 0\pmod {x^n} \]

\[\frac{1}{f(x)}-h(x)\equiv 0\pmod {x^n} \]

那么令 \(g(f(x))=\frac{1}{f(x)}-h(x)\),我们得到

\[\begin{aligned} f(x)&\equiv f_0(x)-\frac{g(f_0(x))}{g'(f_0(x))} \pmod {x^n}\\ &\equiv f_0(x)-\frac{\frac{1}{f_0(x)}-h(x)}{-\frac{1}{f_0^2(x)}} \pmod {x^n}\\ &\equiv f_0(x)(2-f_0(x)h(x)) \pmod {x^n} \end{aligned} \]

注意 \(g(f_0(x))\) 的主元是 \(f_0\)。不妨令 \(f_0=t\),则有 \(g(t)=\frac{1}{t}-h(x)\),这里 \(h(x)\) 当作常数,故 \(g'(t)=-\frac{1}{t^2}\)。

多项式 exp

给定 \(h(x)\),求出 \(f(x)\) 使得 \(\exp(h(x))\equiv f(x)\pmod {x^n}\)。

考虑变换形式。上式即

\[h(x)\equiv \ln f(x)\pmod {x^n} \]

故 \(\ln f(x)-h(x)\equiv 0\pmod {x^n}\)。那么令 \(g(f(x))=\ln f(x)-h(x)\)。

应用 Newton 迭代的结论,我们得到

\[\begin{aligned} f(x)&\equiv f_0(x)-\frac{g(f_0(x))}{g'(f_0(x))}\pmod {x^n} \\ &\equiv f_0(x)-\frac{\ln f(x)-h(x)}{\frac{1}{f_0(x)}}\pmod {x^n} \\ &\equiv f_0(x)(1-\ln f(x)+h(x))\pmod {x^n} \end{aligned} \]

\(T(n)=T(\frac{n}{2})+\mathcal{O}(n\log n)\),所以时间复杂度为 \(\mathcal{O}(n\log n)\)。但是常数应该很大。

多项式开根

给定 \(h(x)\),求出 \(f(x)\) 使得 \(\sqrt{h(x)}\equiv f(x)\pmod {x^n}\)。

上式即 \(f^2(x)-h(x)\equiv 0\pmod {x^n}\)。于是令 \(g(f(x))=f^2(x)-h(x)\)。

\[\begin{aligned} f(x)&\equiv f_0(x)-\frac{g(f_0(x))}{g'(f_0(x))}\pmod {x^n} \\ &\equiv f_0(x)-\frac{f_0^2(x)-h(x)}{2f_0(x)}\pmod {x^n} \\ &\equiv \frac{f_0^2(x)+h(x)}{2f_0(x)}\pmod {x^n} \end{aligned} \]

\(T(n)=T(\frac{n}{2})+\mathcal{O}(n\log n)\),时间复杂度 \(\mathcal{O}(n\log n)\)。(可能需要求解二次同余。)

多项式快速幂

事实上,存在 \(\mathcal{O}(n\log n\log k)\) 的快速幂做法。

普通版:保证 \(x_0=1\)

\[F^k(x)=\exp(k\ln F(x)) \]

加强版

标签:frac,pmod,多项式,基础,cdot,mathcal,equiv
From: https://www.cnblogs.com/Starrykiller/p/17963608/polynomial-basis

相关文章

  • Json Schema介绍 和 .net 下的实践 - 基于Lateapexearlyspeed.Json.Schema - 基础1 -
    本系列旨在介绍JsonSchema的常见用法,以及.net实现库Lateapexearlyspeed.Json.Schema的使用这篇文章将介绍JsonSchema中的type关键字,和string类型的常见验证功能。用例基于.net的LateApexEarlySpeed.Json.Schemanugetpackage。这是新创建的一个JsonSchema在.net下的高性能......
  • 存储基础:ATA、SATA、SCSI、SAS、FC
    一、概述关于存储,作为一名运维工程师我觉得是很有必要去花点时间去了解一下的!磁盘是服务器、存储设备的主要存储媒介之一,非常重要!按照存储介质类型一般分为机械磁盘(HDD、传统磁性硬盘)、固态磁盘(SSD,主要使用闪存颗粒来存储)、混合磁盘(HHD,磁性硬盘和闪存集成到一起的硬盘)。按照接口......
  • 【scikit-learn基础】--『监督学习』之 均值聚类
    聚类算法属于无监督学习,其中最常见的是均值聚类,scikit-learn中,有两种常用的均值聚类算法:一种是有名的K-means(也就是K-均值)聚类算法,这个算法几乎是学习聚类必会提到的算法;另一个是均值偏移聚类,它与K-means各有千秋,只是针对的应用场景不太一样,但是知名度远不如K-Means。本篇介绍如......
  • Asp.Net怎么上传图片-基础教程
    aspx页面script方法内用于判断用户上传的文件是否为自己要求的格式和展示图片的方法body内定义一个图片框用于预览用户上传的图片一个上传文件的控件一个提交按钮代码如下Script代码:$(function(){$('#uploadImage').on('change',function(){var......
  • 【Shell基础】Bash基础与Linux三剑客
    shell是什么?可以做哪些?Shell是⼀种解释性的语⾔,适⽤于基本的逻辑处理和不追求速度的应⽤。用于:人机交互批处理Unix、Linux、Mac、Android、IOS脚本自动化工作场景服务端测试移动测试持续集成与自动化部署shell种类bashshzshwindows没有/etc/shells,需要安......
  • 跟着阿灵学前端(1)——HTML 基础
    1.html排版标签标签名标签含义单/双标签h1~h6标题双p段落双div块,没有任何含义,用于整体布局(生活中的包装袋)双注意:1、一个页面只能有一个h1,可以有多个h2-h6,h标签不允许互相嵌套。2、p标签很特殊,里面不能有p、div、h1~h6标签,会自定甩出来自动前后补全......
  • 跟着阿灵学前端(2)——CSS 基础
    1.CSS简介CSS的全称为:层叠样式表(CascadingStyleSheets)。CSS也是一种标记语言。用于给HTML结构设置样式,例如:文字大小,颜色,元素宽高等等。简单理解:CSS可以美化HTML,让HTML更漂亮。核心思想:HTML搭建结构,CSS添加样式,实现了:结构与样式的分离。2.CSS的编写位置2.1行......
  • 多项式定积分计算软件2025 64位WIN版下载Polynomial definite integral calculation s
    本软件功能强大,价格实惠,欢迎试用本软件的WIN64位版本。本软件能计算如a0+a1*x+a2*x^2+......+an*a^n的式子的对b1和b2的积分的结果。具体的方法就是在多多项式系数区输入a0到an的值,然后点击计算积分结果即可在结果栏算出结果。最大项数为1000项。多项式系数输入时1项1行,从上......
  • OSPF理论基础
    由于静态路由由网络管理员手工配置,因此当网络发生变化时,静态路由需要手动调整,这制约了静态路由在现网大规模的应用。动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,OSPF(OpenShortestPathFirst,开放式最短路径优先)协议是使用场景非常......
  • (坚持每天写算法)基础算法复习与学习part1基础算法1-7——高精度减法(处理t=1和t>1代码的
    题目:思路:这一道题其实和高精度加法的思路是差不多的,都是使用算式进行模拟。重点:关于代码怎么写,在高精度加法那里还看不太出来(我也没有写),但是在高精度减法这里就完全可以看出来了。我们在加法算式里面,一般是A[i]+B[i]+t,但是也可以这么写:t+A[i]+B[i],我们可以先写进位......