首页 > 其他分享 >多项式

多项式

时间:2024-11-02 17:12:24浏览次数:1  
标签:frac pmod 多项式 cdot omega equiv

多项式的表示

系数表示法

即\(F(x)=a_0x^0+a_1x^1+...+a_nx^n\)

点值表示法

一个\(n\)次多项式可以被\(n+1\)个点唯一确定

可以用这\(n+1\)个点表示该多项式

多项式卷积

\[(f*g)(x)=\sum_{i=0}^{n}\sum^n_{j=0}a_ib_{j}x^{i+j} \]

说白了就是暴力展开

快速傅里叶变换(FFT)

单位根

对于复数\(\omega\)满足\(\omega^n=1\),则称$\omega \(为\)n$次单位根

对应为复平面上平分单位圆的\(n\)个单位向量

可用复数的三角表示构成,也可用欧拉公式

性质

1、\(\omega^k_n=\omega^{2k}_{2n}\)

2、\(\omega^k_n=-\omega_n^{k+\frac n 2}\)

3、\(\omega^0_n=\omega^n_n=1\)

对应到复平面很好理解

DFT离散快速傅里叶变化

即把多项式用\(n\)次单位根转成点值表示法

对于多项式\(F(x)=a_0x^0+a_1x^1+...+a_{n-1}x^{n-1}\),\(n\)为\(2^p\)

奇偶分项:\(F(x)=a_0x^0+a_2x^2+...+a_{n-2}x^{n-2}+x(a_1x^0+a_3x^2+...+a_{n-1}x^{n-2})\)

设多项式\(G(x)=a_0x^0+a_2x^1+...+a_{n-2}x^{\frac n 2-1},H(x)=a_1x^0+a_3x^1+...+a_{n-1}x^{\frac n 2-1}\)

则有\(F(x)=G(x^2)+x\cdot H(x^2)\)

设\(1\le k < \frac n 2\),将单位根\(\omega^k_n\)和\(\omega^{k+\frac n 2}_n\)带入,则

\[F(\omega^k_n)=G((\omega^k_n)^2)+\omega^k_n\cdot H((\omega^k_n)^2) \]

\[\hspace{0.3cm}=G(\omega^{2k}_n)+\omega^k_n\cdot H(\omega^{2k}_n) \]

\[\hspace{0.3cm}=G(\omega^{k}_{\frac n 2})+\omega^k_n\cdot H(\omega^{k}_{\frac n 2}) \]

\[F(\omega^{k+\frac n 2}_n)=G((\omega^{k+\frac n 2}_n)^2)+\omega^{k+\frac n 2}_n\cdot H((\omega^{k+\frac n 2}_n)^2) \]

\[\hspace{0.6cm}=G(\omega^{2k+n}_n)+\omega^{k+\frac n 2}_n\cdot H(\omega^{2k+n}_n) \]

\[=G(\omega^{k}_{\frac n 2})-\omega^k_n\cdot H(\omega^{k}_{\frac n 2})\hspace{0.45cm} \]

对\(G,H\)递归求出各自的点值表示\((\omega^{1}_{\frac n 2},\omega^{2}_{\frac n 2},...,\omega^{\frac n 2-1}_{\frac n 2})\),就可以\(O(n)\)得到\(F\)的点值表示

IDFT快速傅里叶逆变换

即把单位根全部取倒数跑一边DFT,得到每个数除以\(n\),可得到新的多项式

迭代FFT

(待补充)

快速数论变换(NTT)

求\([x^i](f*g)(x)\ \bmod p\)

简单来说就是把单位根换成原根

原根的性质:

1、对于质数\(p\)的原根\(g\),\(g^1,g^2,...g^{p-1}\)互不相同

2、单位根的三个性质都有

因此,可以进行模意义下的DFT和IDFT

原根的使用

类比单位根,我们可以认为\(g^1,g^2,...g^{p-1}\)这\(p-1\)个数把单位圆均分成\(p-1\)份,可以通过均等间隔选点来改变切割份数,也就是说,如果想用\(g^i\)代替\(\omega_n^k\),就必须满足\(p-1\)为\(n\)的整数倍

\(998244353=7*17*2^{23}+1,g=3\),\(2^{23}\)一般可以满足分治需求的份数

任意模数下NTT(MTT)

多项式的运算

多项式求逆

求多项式\(G(x)\),使得\(F(x)*G(x)\equiv 1\pmod {x^n}\)

这里的模运算其实是砍掉\(x^n\)及以后的项

利用倍增求解:

设\(H(x)\)满足\(F(x)*H(x)\equiv 1\pmod {x^{\lceil\frac n 2\rceil}}\)

且易知\(F(x)*G(x)\equiv 1\pmod {x^{\lceil\frac n 2\rceil}}\)

则有\(F(x)*(G(x)-H(x))\equiv 0\pmod {x^{\lceil\frac n 2\rceil}}\)

\(G(x)-H(x)\equiv 0\pmod {x^{\lceil\frac n 2\rceil}}\)

\((G(x)-H(x))^2\equiv 0\pmod {x^{\lceil\frac n 2\rceil}}\)

\(G(x)^2-2G(x)H(x)+H(x)^2\equiv 0\pmod {x^{\lceil\frac n 2\rceil}}\)

\(G(x)^2-2G(x)H(x)+H(x)^2\equiv 0\pmod {x^n}\textcolor{red}{{}^*}\)

乘上\(F(x)\),根据\(F(x)*G(x)\equiv 1\pmod {x^n}\):

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

\(G(x)\equiv 2H(x)-F(x)H(x)^2\pmod {x^n}\)

细节

注意生成\(G(x)=2H(x)-F(x)*H^2(x)\)时,要把\(G(x)\)的\(0\sim 2^p-1\)次项全部算出来(而不是只算前\(n\)项)

因为在系数-点值表示相互转换时,各项都是互相依赖的(唯一地表示一个多项式),只做一点会导致多项式不正确

多项式求ln

多项式求exp

多项式开根

生成函数

拉格朗日插值

定义

我们知道,\(n\)个点可以唯一确定一个\(n-1\)次多项式(如三点确定一个二次函数)

那么拉格朗日插值就是根据这个原理形成的多项式表示法

对于\(n\)个点\((x_1,y_1),(x_2,y_2),...,(x_n,y_n)\),有

\[F(x)=\sum^n_{i=1} y_i\prod_{j=1}^{n,j\not=i}\frac{x-x_j}{x_i-x_j} \]

利用该插值表示法,可以绕过求系数表示法,\(O(n^2)\)求出\(F(x)\)

编号连续的插值

若\(x_i=i\),及\(x\)为\([1,n]\),则有

\[F(x)=\sum^n_{i=1} y_i\prod_{j=1}^{n,j\not=i}\frac{x-j}{i-j} \]

发现该式分子分母分别整合得到:

\[F(x)=\sum^n_{i=1} y_i\frac{\prod^n_{j=1}(x-j)}{(x-i)\cdot(-1)^{n-i}\cdot(i-1)!\cdot(n-i)!} \]

通过预处理阶乘逆元\(facinv[]\)数组和\(\prod^n_{j=1}(x-j)\),可以将时间复杂度降至\(O(nlogn)\)(再预处理\((x-i)^{-1}\)可以达到\(O(n)\))

拉插优化DP

原理:\(n\)次多项式求前缀和后为\(n+1\)次多项式,即\(F_{n+1}(n)=[F_n(1),F_n(1)+F_n(2),\ ...\ ,\sum _{i=1}^nF_n(i),\ ...\ ]\)

(详见题解

所以对于满足状态\(f[]\)为多项式的DP,可以通过拉插来求出多项式

The Sum of the k-th Powers

经典模型:
\(\sum_{i=1}^ni^k\)

差分发现为\(n\)次多项式,故答案为\(n+1\)次多项式,拉插即可

P3643 [APIO2016] 划艇

设\(f[i][j]\)为学校\(i\)派\(j\)艘划艇,列出方程:

\[f[i][j]=\begin{cases}\sum^i_{k=1}\sum^j_{l=1}f[k][l]\ \hspace{0.4cm},l\le j\le r \\ 0\hspace{3cm},\text{otherwise}\end{cases} \]

前缀和:

\[f[i][j]=\begin{cases}\sum^j_{k=1}[i-1][k]\ \hspace{0.4cm},l\le j\le r \\ f[i-1][j]\hspace{1.18cm},\text{otherwise}\end{cases} \]

由于\(i=1\)时,\(f[i][j]=1\),为\(0\)次多项式,则\(f[i][j]\)也是多项式

又注意到\(l,r\)范围很大,考虑离散化

但是离散化之后,原数列被分成若干段,且每段状态不一(如\(f[1][]\)会有\(0/1\)),不能用一个多项式表示,但是每段状态是一样的,可以用一个多项式表示

于是引出分段多项式做法:每一段维护一个多项式,总时间复杂度\(O(n^3)\)

p.s. 题解普遍用的是组合数,可以试试

p.s.s. 拉插优化DP要注意常数优化

标签:frac,pmod,多项式,cdot,omega,equiv
From: https://www.cnblogs.com/zhone-lb/p/18522200

相关文章

  • 【密码学】全同态加密基于多项式环计算的图解
    全同态加密方案提供了一种惊人的能力——能够在不知道数据具体内容的情况下对数据进行计算。这使得你可以在保持潜在敏感源数据私密的同时,得出问题的答案。  这篇文章的整体结构包括多项式环相关的数学介绍,基于多项式环的加密和解密是如何工作的,同态加法和乘法如何实......
  • 多项式模板
    #include<bits/stdc++.h>#defineFor(i,x,y)for(inti=(x);i<=(y);i++)#definesz(v)(int)(v.size())usingnamespacestd;intksm(intx,inty,intp){intv=1;x%=p;while(y)v=1ll*v*((y&1)?x:1)%p,x=1l......
  • 多项式求和【链表】
    题面给定两个多项式,用链表表示,实现多项式的加法运算。链表中的每个节点包含两个属性:系数和指数。例如,多项式\(3x^3+4x^2+5x+6\)可表示为链表[(3,3),(4,2),(5,1),(6,0)]。输入格式:第一行:第一个多项式的项数n接下来的n行:每行两个整数,分别代表系数和指数,描述第一个多项式的......
  • 多项式全家桶(完善中)
    namespacePolynomial{constintN=2e6+5,G=3,iG=332748118;intcir[N],w[N],r[N],sav[N];voidfft(int*f,intlen,intt){for(inti=0;i<len;++i){cir[i]=(cir[i>>1]>>1)|((i&1)?len>>1:0);if(......
  • 基于拉格朗日插值多项式的Shamir's Secret Sharing 加密算法
    Shamir'sSecretSharing是一种加密算法,由AdiShamir于1979年提出,旨在将一个秘密(如密码、密钥等)分割成多个部分,并分发给不同的参与者。只有当足够数量的参与者(大于等于一个特定的阈值)将他们的份额组合在一起时,秘密才能恢复。少于阈值数量的参与者无法得到任何有用的信息。核心......
  • 多项式全家桶
    每次复习完下一次都会忘,这次下定决心一定要记下来!!!FFT和NTT板子,直接拿过来(包括了其他的定义):intn,m,rev[maxn];intqpow(intx,intk,intp){ intres=1; while(k){ if(k&1) res=res*x%p; k>>=1,x=x*x%p; } returnres;}voidprepare(......
  • 多项式
    多项式,OI的魅力,OIer的噩梦。多项式这个大家应该都会。对于式子\(\sum\limits_{i=0}^{k}a_{i}x^i\),且\(a_k\ne0\),那么我们称它是关于\(x\)的\(k\)次多项式。\(k\)为次数。就是这么简单生成函数定义:对于序列\(a_0,a_1,a_2,a_3,...\),其生成函数为\[f(x)=a_{0}+a_{......
  • 密码学承诺之原理和应用 - Kate多项式承诺
    主页微信公众号:密码应用技术实战博客园首页:https://www.cnblogs.com/informatics/GIT地址:https://github.com/warm3snow简介多项式承诺是一种实用性比较强的密码学承诺方案,允许一个方(承诺者)向另一个方(验证者)承诺一个多项式的值,而不泄露多项式的具体形式。在零知识证明、可......
  • 基础多项式
    基础组合多项式多项式定义:普通多项式定义\(x^n\)为\(x\)的\(n\)次普通幂:\[x^n=\prod_{i=0}^{n-1}x\]则定义一个普通多项式\(F(x)\)为:\[F(x)=\sum_{i=0}A_ix^i\]变种:下降幂多项式定义\(x^{\underline{n}}\)为\(x\)的\(n\)次下降幂:\[......
  • 南沙C++信奥赛陈老师解一本通题:1945:【09NOIP普及组】多项式输出
    ​ 【题目描述】一元 nn 次多项式可用如下的表达式表示: f(x)=anxn+an−1xn−1+...+a1x+a0,an≠0f(x)=anxn+an−1xn−1+...+a1x+a0,an≠0 其中,aixii 称为i次项,ai称为ii次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:1.多项式中......