数学知识总结

1|0数学知识总结

1|0质数

唯一分解定理:一个自然数n可以被唯一分解为n=p1a1p2a2pkak,其中p1,p2pk为互不相同的质数。

1|0质数筛法:

1.埃式筛:每筛一个数时,暴力地将这个数的所有倍数标记,最终没有被标记的就是质数

2.线性筛:每筛一个数的时候,枚举这个数的筛好的质数倍数,如果这个数是枚举的质数的倍数就停止,这样每个数只会被标记一遍,复杂度是线性的。

1|0质数判定:

如果n不大,可以枚举n的所有质数,复杂度O(nln(n))

Miller_rabin算法:

根据费马小定理,对于质数p和与它互质的数a,有ap11(modp),但是也有合数满足这个条件(即费马伪素数),于是又引入了二次探测定理:对于质数p,若x21(modp),则小于px只有1和p1。这样如果我们得到了ap11(modp),且p1为偶数,那这就等价与(ap12)21(modp),这时就需要判断ap12modp是不是等于p1或1,如果不是,p就不是质数,否则就继续判断p14直到变为奇数。也就是说,假设要检验的数是n,就先将n1化成x×2y的形式,然后对ax,a2x,a22x,这些数的解要么是全1,要么是出现p1后全1,否则就不是质数。

1|0分解质因数:

1.线性筛预处理出每个数的最小质因子,然后不断除最小质因子即可,复杂度O(logn)

2.Pollard Rho算法:

考虑到用试除法枚举因子的复杂度是O(n),我们尝试用随机化,即每次随机一个数计算与ngcd,但这样最坏复杂度是nlogn的,于是我们需要优化随机方法。首先,根据生日悖论,假设有n有一个因子p,那么期望枚举p个随机数就可以得到两个数的差是p的倍数。不过验证两两的差复杂度还是很高,于是我们尝试用伪随机数,即设f(x)=x2+c,随机数为x,f(x),f(f(x)),不过可以观察发现这个序列是混循环序列,于是需要判环。这里采用floyd判环法,即一个人每次变成f(x),另一个人f(f(x)),这样一定会相遇。同时,由于f(x)=x2+c,如果|ij|0(modp),那么有|f(i)f(j)|0(modp),因此每次移动时相当于检查一个新的数。这样的复杂度时O(n14logn)的。不过我们可以考虑每固定C距离再算一次gcd,这样就可以做到期望O(n14)

1|0因数倍数

gcd(a,b)表示a,b的最大公约数,lcm(a,b)表示a,b的最小公倍数,求法:辗转相除法,更相减损法。

1|0同余

数论倒数(逆元):满足a×a11(modp)a1就叫做a在模p意义下的逆元。

1|0费马小定理:

对于质数pap11(modp)

1|0欧拉定理:

ap(即gcd(a,p)=1),则aφ(p)1(modp)

1|0拓展欧拉定理:

对于任意a,b,p(bφ(p))ababmodφ(p)+φ(p)(modp)

1|0威尔逊定理:

对于质数p(p1)!1(modp)

1|0阶和原根:

阶:对于apa,p,满足an1(modp)的最小正整数n叫做ap的阶,记为δp(a)

性质:

1.a,a2,aδp(a)两两不同余

2.若aiaj(modp),则ij(modδp(a))

原根:对于ap,若δp(a)=φ(p),则a叫做p的原根。

1|0同余方程

1|0拓展欧几里得:

用于求解形如ax+by=gcd(a,b)的二元一次不定方程组,思路如下:

若已知一组满足条件的解x0,y0,则这组解满足bx0+(amodb)y0=gcd(a,b),由此可得ax+by=bx0+(amodb)y0

而取模运算amodb等同于ab×ab,因此又可以推出:

ax+by=bx0+(ab×ab)y0

ax+by=bx0+ay0b×aby0=ay0+b(x0aby0)

由此推出x=y0,y=x0aby0

我们可以发现,x0,y0所在的方程组的系数为a,amodb,很容易发现这刚好对应辗转相除法,所以最后一定会以a=gcd(a,b),b=0结束,此时x,y可以为任意整数(x0),这就是最终的x0,y0,我们就可以由此推出该方程的解。

1|0类欧几里得

用于求解形如i=0nai+bc的问题

f(a,b,c,n)=i=0nai+bc

a=0

f(a,b,c,d)=(n+1)bc

acbc

f(a,b,c,n)=i=0n(i(amodc)+(bmodc)c+iac+bc)

=f(amodc,bmodc,c,n)+n(n+1)2ac+(n+1)bc

a<cb<c时,设M=an+bc

f(a,b,c,n)=i=0nj=1M[jai+bc]

=i=0nj=0M1[jc+c<ai+b+1]

=j=0M1i=0n[i>jc+cb1a]

=j=0M1(njc+cb1a)

=nMf(c,c+b1,a,M1)

于是有

f(a,b,c,n)={(n+1)bca=0n(n+1)2ac+(n+1)bc+f(amodc,bmodc,c,n)acorbcnMf(c,cb1,a,M1),M=an+bcotherwise

复杂度O(logn)

1|0求解同余方程组:

中国剩余定理(CRT):

{xa1(modp1)xa2(modp2)xan(modpn)其中p1,p2pn两两互质。

如果我们求出了mul=i=1npi,那么有(mulpi)×(mulpi)1modpj={1i=j0ij,于是有:
ans=i=1n(ai×(mulpi)×(mulpi)1modpi)modmul

拓展中国剩余定理(EXCRT):
{a1xb1(modp1)a2xb2(modp2)anxbn(modpn)其中p1,p2pn不互质。

我们记解决到当前方程是原答案为x0,当前方程以前所有pi的最小公倍数为lcm,所以当前解x需满足x=x0+tlcm,由此得

a(x0+tlcm)b(modp)

a(x0+tlcm)+py=b

(alcm)t+py=bax0

(alcm)(t×gcd(alcm,p)bax0)+p(y×gcd(alcm,p)bax0)=gcd(alcm,p)

此时我们可以发现方程已经写成了形如ax+by=gcd(a,b)的形式

x=t×gcd(alcm,p)bax0,y=y×gcd(alcm,p)bax0

则方程可写为(alcm)x+py=gcd(alcm,p)v

而我们要求的t就是x×bax0gcd(alcm,p)

所以可判断当gcd(alcm,p)(bax0)时方程无解。而有解时,可以由exgcd可算出xy没有用),所以能求出t=x×bax0gcd(alcm,p),而新的x0x0+tlcm,这时再更新lcm=lcm×p÷gcd(lcm,p)

1|0求解高次同余方程

求同余方程axb(modp)(ap)

BSGS

根据欧拉定理,一定有一个小于φ(p)的根,设P=p,那么x可以表示为iPj,其中0i1,jP,即aPijb(modp),也就是aPibaj(modp),那么只要有匹配的aPibaj即可。

1|0组合数

定义Cnm表示从n个元素中选出m个元素的方案数,有Cnm=n!m!(nm)!,也写作(nm)

递推公式:(nm)=(nm1)+(n1m1)

二项式定理:(a+b)n=i=0n(ni)aibni

1|0Lucas定理

对于质数p,有
(nm)=(npmp)×(nmodpmmodp)(modp)

1|0容斥

基本公式
|i=1nai|=T[1,n]1|T|+1|iTai|

1|0min-max容斥

maxiSai=TS(1)|T|+1miniTai

miniSai=TS(1)|T|+1maxiTai

1|0二项式反演

二项式反演用于解决“某种物品恰好若干个”这类的问题,与容斥原理类似。

一般形式:若gn=i=0n(ni)fi,那么有fn=i=0n(ni)(1)nigi

证明:将gi展开,得

fn=i=0n(ni)(1)nij=0i(ij)fj=j=0nfji=jn(ni)(ij)(1)ni=j=0nfji=jn(nj)(njij)(1)ni=j=0nfj(nj)k=0nj(njk)(1)njk=j=0nfj(nj)k=0nj(njk)(1)njk1k=j=0nfj(nj)(1+1)nj=j=0nfj(nj)[nj==0]=fn

一般的二项式反演形式有两种,一是gn表示至多n个的方案数,fn表示恰好n个的方案数,那么有

gn=i=0n(ni)fifn=i=0n(ni)(1)nigi

二是gn表示至少n个的方案数,fn表示恰好n个方案数,那么有

gj=i=jn(ij)fifj=i=jn(1)ij(ij)gi

1|0积性函数

积性函数:对于任意的gcd(i,j)=1f(i)×f(j)=f(ij)

完全积性函数:对于任意的i,jf(i)×f(j)=f(ij)

ϵ(x)=[x==1]I(x)=1id(x)=xσk(x)=d|xdk

1|0狄利克雷卷积

(fg)(n)=d|nf(n)g(nd)

推论:

1.μI=ϵ

证明:当n=1时上式显然为1,当n>1时,根据唯一分解定理,设n=p1a1p2a2pkak,根据μ的定义,若ai>1μ(d)为0,则d|nμ(d)=i=0k(ki)(1)i=(11)k=0

2.φI=id

证明:当n=pm时,d|nφ(d)=φ(1)+i=1mφ(pi)=1+i=1m(pipi1)=pm=n

n为任意整数时,令n=pm,则(φI)(pm)=(φI)(p)=pm=n

3.μid=φ

证明:
id=φI

μid=φ(Iμ)

μid=φϵ=φ

1|0莫比乌斯反演


g(n)=d|nf(d)
n)=d|nμ(d)g(nd):因为g=(fI),所以gμ=fIμ=f(Iμ)=fϵ=f

1|0杜教筛

杜教筛是用来快速求积性函数前缀和的方法。具体来说,我们设S(n)=i=1nf(i),再找一个积性函数g(x),考虑(fg)的前缀和
i=1n(fg)(i)=i=1nd|if(d)g(id)=d=1ng(d)i=1ndf(i)=d=1ng(d)S(nd)

我们把g(1)S(n)提出来,就是g(1)S(n)=i=1ng(i)S(ni)i=2ng(i)S(ni),我们发现,前一项i=1ng(i)S(ni)由前面推导可知为i=1n(fg)(i),于是得到了杜教筛的核心式子:
g(1)S(n)=i=1n(fg)(i)i=2ng(i)S(ni)这就意味着,只要我们找到一个可以快速计算(fg)的前缀和的g(x),我们就可以用数论分块递归求解S(n),时间复杂度是O(n34),如果我们预处理前n23个答案,我们就可以把复杂度降到O(n23)

1|0狄利克雷前缀和

狄利克雷前缀和是一种可以在O(nlnlnn)的时间内求出序列b,满足bi=x|iax。我们可以把这个理解为高维前缀和,一个质数就是一维,因此就可以按照高维前缀和的方法来求解,即每次枚举质数p,然后apiai+api。然后因为所有质数的倒数和是O(lnlnn)的,因此复杂度是O(nlnnlnn)的。

同样的还有狄利克雷后缀和,即bi=i|xax,求解的方式也就类似高维后缀和,复杂度是一样的。

1|0多项式

1|0拉格朗日插值

第一步:子函数 fi(x)={1x=xi0x=xj(ij)

由此可得:f(x)=i=1nyifi(x)

第二步:对于 fi(x),要满足当x=xi时,y=1,而xxi时,y=0故:

fi(x)=j=1,jin(xxj)j=1,jin(xixj)

这就是拉格朗日基本多项式(插值基函数)

因此多项式第i项为 yi×j=1,jin(xxj)j=1,jin(xixj)

所以又可以把多项式写为:

f(x)=i=1nyi×j=1,jin(xxj)j=1,jin(xixj)

展开后为:f(x)=y1(xx2)(xx3)(xxn)(x1x2)(x1x3)(x1xn)+y2(xx1)(xx3)(xxn)(x2x1)(x2x3)(x2xn)+yn(xx1)(xx2)(xxn1)(xnx1)(xnx1)(xnxn1)

我们可以发现,当x=xi时,除了第i项,其余项的分子中都有一项为(xxi),故其余项都为0,而对于第i项,分子中的(xxj)(ji)与分母中的(xixj)(ji)消掉了,最终只剩下了分子中的yi,因此就证明了f(x)就是满足f(xi)=yi的多项式。

1|0FFT

1|01.复数

复数是形如a+bi的数(i=1,a,b为实数),分为实部和虚部,并且复数可以在坐标系中表示

例如,a+bi可以这样表示

这个用平面直角坐标系来表示复数的坐标系叫做复平面,x轴为实轴,y轴为虚轴,显然,在实轴上的点都表示实数;除了原点外,虚轴上的点都表示纯虚数。复平面内的点 (a,b)表示虚数a+bia+bi就可以表示为一个二维平面内的点Z(a,b),Z(a,b)与向量OZ唯一对应,我们把向量OZ的模r叫做复数z的模,记作|z|,那么有:

|z|=|a+bi|=|r|=a2+b2

我们常把z=a+bi说成点Z或向量OZ,并规定相等的向量代表同一个复数。

z0时,向量OZ与实轴正方向的夹角称为复数z的辐角,记作argz。辐角的符号规定为:由正实轴依反时针方向转到OZ为正,依顺时针方向转到OZ为负。

复数相乘时,模长相乘,辐角相加。

设有两个复数z1=a+bi,z2=c+di,对应点为A(a,b),B(c,d),它们的积z1z2=(acbd)+(ad+bc)i,对应点C(acbd,ad+bc)

模长相乘:

|z1z2|=(acbd)2+(ad+bc)2=a2c2+b2d2+a2d2+b2c2=(a2+b2)×(c2+d2)=|z1||z2|

辐角相加:

P(1,0),连OP,PB,AC

AC2=[a(acbd)]2+[b(ad+bc)]2=a2c2+a2d2+b2c2+b2d2+a2+b22a2c2b2c=(a2+b2)(c2+d22c+1)=(a2+b2)[(1c)2+(d)2]=OA2PB2

AC:PB=OA

OC:OB=OA:OP=AC:PB=OA

OACOPB

AOC=BOP

argz1z2=AOC+AOP=argz1+argz2

1|02.单位根

wn=1,则称wn次单位根,在复平面上,n次单位根就是将单位圆等分成n

单位圆

可以发现,n次单位根是且只能是辐角为2kπn,即1n圆周的复数

所以由欧拉公式eiθ=cosθ+isinθ可得wnk=e2kiπn=cos2kπn+isin2kπn

所以可得:

1.w2n2k=wnk

证明:w2n2k=cos2×2kπ2n+isin2×2kπ2n=wnk

2.wnk+n2=wnk

证明:wnk+n2=cos(2k+n)πn+isin(2k+n)πn=cos(2kπn+π)+sin(2kπn+π)=cos2kπn+i(sin2kπn)=wnk

3.DFT

一个n次多项式可以由n个点值唯一确定,但朴素求这n个点值是O(n2)的。
设一个多项式f(x)的系数为a0,a1,a2an1

将f(x)按下标的奇偶性分类:
f(x)=a0+a2x2+a4x4+an2xn2+a1x+a3x3+an1xn1

f1(x)=a0+a2x+a4x2+an2xn21,

f2(x)=a1+a3x+a5x2+an1xn21

f(x)=f1(x2)+xf2(x2)

我们将wnk(k<n2)代入得

f(wnk)=f1(wn2k)+wnkf2(wn2k)

wnk+n2(k<n2)代入得

f(wnk+n2)=f1(wn2k+n)+wnk+n2f2(wn2k+n)=f1(wn2k)wnkf2(wn2k)

我们发现,这两个式子只有符号不一样,因此我们算f1的时候,可以O(1)得出f2,这样问题的规模就减小了一半。

时间复杂度:

不难看出FFT是类似于线段树一样的分治算法。

因此它的时间复杂度为O(nlogn)

1|0分治FFT

分治FFT可以在O(nlog2n)的时间内求出满足fi=j=1ifijgjf。我们发现,f数组在计算是需要用到之前算出来的值,不是很好直接处理,于是考虑计算每个数对后面的数的贡献。我们可以类比CDQ分治,算出[l,mid][mid+1,r]的贡献,然后累加起来就可以了。算贡献的一步就是直接将flfmidg1grl+1卷起来,单次复杂度O(nlogn),因此总复杂度是O(nlog2n)的。

1|0NTT

FFT的缺点在于要用到复数,对精度要求高,而且无法进行取模,这就引出了NTT。NTT运用原根代替FFT的单位根(即有一样的性质),因此在NTT时直接将原根带入即可,复杂度和FFT一样。

1|0FWT

FWT即位运算卷积,用来快速计算形如ij=kfigj,其中表示某种位运算。

设 FWT(A) 是幂级数 A经过 FWT 变换之后得到的幂级数。

我们需要令其满足 : AB=CFWT(A)·FWT(B)=FWT(C)(点积)。

FFT 是一个线性变换,我们也希望 FWT 变换是线性的。

我们还不知道怎么变换,于是设 c(i,j)为变换系数,即 A[j]FWT(A)[i]的贡献系数。

FWT(A)[i]=j=0n1c(i,j)Aj

FWT(A)FWT(B)=FWT(C),得到:

FWT(A)[i]FWT(B)[i]=FWT(C)[i]

j=0n1c(i,j)A[j]k=0n1c(i,k)B[k]=p=0n1c(i,p)C[p]

j=0n1k=0n1c(i,j)c(i,k)A[j]B[k]=p=0n1c(i,p)C[p]

根据AB=C得到:

C[p]=t1t2=pA[t1]B[t2]

p=0n1c(i,p)C[p]=p=0n1c(i,p)t1t2=pA[t1]B[t2]

j=0n1k=0n1c(i,j)c(i,k)A[j]B[k]=p=0n1c(i,p)t1t2=pA[t1]B[t2]

j=0n1k=0n1c(i,j)c(i,k)A[j]B[k]=p=0n1t1t2=pA[t1]B[t2]c(i,t1t2)=t1=0n1t2=0n1A[t1]B[t2]c(i,t1t2)

对比左右两边,我们发现只要满足c(i,k)c(i,k)=c(i,jk)就好了

现在,假设有了符合要求的c,如何优化FWT呢?

我们把FWT(A)[i]=j=0n1c(i,j)A[j]按位折半,有
=j=0n21c(i,j)A[j]+j=n2n1c(i,j)A[j]i
i去掉最高位的数字,那么有
j=0n21c(i0,j0)c(i,j)A[j]+j=n2n1c(i0,j0)c(i,j)A[j]

=c(i0,0)j=0n21c(i,j)A[j]+c(i0,1)j=n2n1c(i,j)A[j]

再设A0下标首位为0的部分,如果i0=0,则有:

FWT(A)[i]=c(0,0)FWT(A0)[i]+c(0,1)FWT(A1)[i](i[0,n2))

如果i0=1,则有

FWT(A)[i+n2]=c(1,0)FWT(A0)[i]+c(1,1)FWT(A1)[i](i[0,n2))

这就变成了一个规模为n2的子问题。

因此关键就是c矩阵。

Or卷积:
c=[1011],c1=[1011]

即:
FWT(A)[i]=FWT(A0)[i],FWT(A)[i+n2]=FWT(A0)[i]+FWT(A1)[i]
IFWT(A)[i]=IFWT(A0)[i],IFWT(A)[i+n2]=IFWT(A1)[i]IFWT(A0)[i]

And卷积:
c=[1101],c1=[1101]

即:
FWT(A)[i]=FWT(A0)[i]+FWT(A1)[i],FWT(A)[i+n2]=FWT(A1)[i]
IFWT(A)[i]=IFWT(A0)[i]IFWT(A1)[i],IFWT(A)[i+n2]=IFWT(A1)[i]

Xor卷积:
c=[1111],c1=[0.50.50.50.5]

即:
FWT(A)[i]=FWT(A0)[i]+FWT(A1)[i],FWT(A)[i+n2]=FWT(A0)[i]FWT(A1)[i]
IFWT(A)[i]=0.5IFWT(A0)[i]+0.5IFWT(A1)[i],IFWT(A)[i+n2]=0.5IFWT(A0)[i]0.5IFWT(A0)[i]

1|0排序不等式

排序不等式就是对于两个序列a,b,如果a1a2an,b1b2bn,那么对于任意1n的排列p,有

i=1naibii=1naibpii=1naibni+1

证明:

首先有一个引理——阿贝尔变换。阿贝尔变换就是对于数列a,b,设prei=j=1ibj,那么有

i=1naibi=anpreni=1n1(ai+1ai)prei

通过这个式子,设prei=j=1ibpj
显然有i[1,n]preiprei,我们就有

i=1naibii=1naibpi=anpreni=1n1(ai+1ai)preianpren+i=1n1(ai+1ai)prei=i=1n1(ai+1ai)(preiprei)0

于是就证明了i=1naibii=1naibpi,后一个不等式的证明同理。


__EOF__

本文作者Xttttr
本文链接https://www.cnblogs.com/Xttttr/p/17275050.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xttttr  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示