数论学习笔记 基础数论(未完成)

来源:互联网 发布:起点西游记知乎 编辑:程序博客网 时间:2024/06/10 12:14

数论相关

本文是一些对基础数论的总结。

欧几里得 Gcd

定义gcd(a,b)即求ab的最小公因数。
求法:根据gcda,b=gcd(b,amodb),递归求解知道b=0时,gcd(a,b)=a
时间复杂度:O(loga)
证明:时间复杂度不是很会证,但是算法的正确性还是很好证的。

k=ab,r=amodb
r=0

gcd(a,b)=gcd(b,0)=b

正确。

r>0时,设d=gcd(a,b),a=xd,b=yd

r=akb=xdkyd=(xky)d

可知d也是r的因数,即gcd(b,r)=dd。接下来就是要证明d=1gcd(y,xky)=1。我们用反证法,设xky=nd,y=md,d>1
x=ky+nd=kmd+nd=(km+n)da=xd=(km+n)ddb=yd=mdd

gcd(a,b)=dd(d>1)gcd(a,b)=d
所以d=1,gcd(a,b)=gcd(b,r)

扩展欧几里得 ExGcd

定义:解决一类形如求ax+by=ca,b,c最小正整数解的问题。
求法:首先方程有解的充要条件是gcd(a,b)|c,因为gcd(a,b)|ax+by。对于求解x,y我们只需参考去gcd的方法递归求解。

假设我们要求ax+by=gcd(a,b)的最小正整数解。
根据

gcd(a,b)=gcd(b,amodb)ax+by=gcd(a,b)bx+(amodb)y=gcd(b,amodb)

可得ax+by=bx+(amodb)y,我们化简一下式子:
ax+by=bx+(amodb)yax+by=bx+(a[ab]b)yax+by=ay+bx[ab]by

也就是说x=y,y=x[ab]y,这样我们就可以递归求解,对与边界b=0的情况显然x=1,y=0

对于ax+by=gcd(a,b)的其他整数解,设为x,y,gcd(a,b)=d,a=ad,b=bd

ax+by=ax+bya(xx)=b(yy)a(xx)=b(yy)

此时ab互质,即b|(xx),a|(yy),设bk=(xx)那么ak=(yy),也就是说k的每种不同取值就对应这一组整数解,我们可以表达为x=x+kb,y=yka

类欧几里得

定义:求解形如nx=0ax+bc(a,b,c)
求法:我们先设Sd(n)=nx=1xd
1. 如果ac,设d=ac则有

x=0nax+bc=x=0n((a%c)x+bc+dx)=dS1(n)+(a%c)x+bc

2.如果bc,设d=bc则有

x=0nax+bc=x=0n(ax+(b%c)c+d)=dS0(n)+x=0n(ax+(b%c)c

根据1,2我们把规模为(a,b,c,n)转化为规模为(a%c,c,b%c,n)

3.ac,bc时,设M=an+bc

x=0nax+bc=x=0ny=0M[y<ax+bc]

接下来化简一下y<ax+bc
c(y+1)ax+bcy+cbaxcy+cb1<axx>cy+cb1a

原式
=y=0Mx=0n[x>cy+cb1a]=y=0M(ncy+cb1a)=n(M+1)y=0Mcy+cb1a

于是问题又从(a%c,b%c,c,n)转换成了(c,cb%c1,,a%c,M)
那么我们只需要递归求解就可以了,而规模每次都是取模的,所以和Gcd类似,复杂度也是O(log)的。

欧拉函数

详细内容戳这里

模相关

中国剩余定理

定义:给定n条形如xai(modmi)的方程,求解x(mi)
求法:考虑如果x=ni=1Fi,且保证

{Fimodmi=aiFimodmj(ji)=0

那么令M=mi,则Fi=Mmi(Mmi)1ai
证明:显然满足。

组合数取模

莫比乌斯函数

定义:设函数

f(n)=d|ng(d)

求法:当f函数已知的情况下可以通过一下函数求的g函数
g(n)=d|nμ(d)f(nd)μ(d)=1,d=1(1)k,d=p1p2...pk(pi)0,

证明:首先,f(n)肯定包含g(n),所以μ(1)=1。那么现在就要减去f(n)中除了g(n)的其他项。这就和容斥原理很像了,考虑减去除掉一个质数的f值,加上除去两个质数的f值…这就是μ(d)的第二种情况。其余的f值不用考虑,对应第三种情况。至此,就是最基础的反演。

性质一:对于任意正整数n,有

d|nμ(d)={1,n=10,n>1

证明:对于n=1的情况,直接就是μ(1)。那么现在考虑n>1的情况。
n=px11px22...pxkk(pi)。设d=py11py22...pykk,加入存在yi2,那么μ(d)=0。现在考虑yi=01的情况。假设d中有ri满足yi=1,那么μ(d)=(1)r,这样的dCrk个,所以
d|nμ(d)=r=0kCrk(1)r=(11)k=0
(根据二项式展开的公式)。

性质二:莫比乌斯函数是积性函数,即当a,b互质时,满足μ(ab)=μ(a)μ(b)

性质三:设f(n)g(n)是集合上的两个函数,并满足f(n)=d|ng(d),则g(n)的积性函数的充分必要条件是f(i)是积性函数。

变形一

f(i)=d=1nig(di)g(i)=d=1nif(di)μ(d)
往容斥方面想一想。

变形二

f(i)=i|d,dng(d)g(i)=i|d,dnf(d)μ(di)
同样往容斥方面想一想。

线筛求μ:根线筛求质数一样先要把质数筛出来。那么每个质数p只会被访问一次,且μ(p)=1。考虑非质数的数x,我们只用x的最小质因子来更新它的μ(x),假设枚举都数字i和第j个质数,那么当imodprij=0时,由于存在存在两个相同的质因子,那么μ(iprij)=0,否则μ(iprij)=μ(i)。这样就能线性的求出μ了。

大步小步法(BSGS)

模型:求解axb(modp)p109+7
解法:分两种情况讨论,pa为质数,pa不互质。

pa互质

考虑欧拉定理,当x>φ(p)在模p意义下ax就已经循环了,所以xφ(p)
x=Ap+B,则原式变为

aAp+Bb(modp)aApb(aB)1(modp)

那么可以预处理右边的n种取值用hash存起来,然后直接枚举AB的最小值。
复杂度O(φ(p))
*当然设的时候可以令x=ApB,那么就不用求逆元了。

pa不互质

考虑怎么把问题转化成第一种情况。
d=gcd(a,p),那么原式变为

adax1bd(modpd)ax1ba(modpd)

当然,当db时无解。
但是a在模pd意义下可能还是没有逆元,那么我们可以重复上面的步骤直到a与模数互质,由于d2所以这个步骤最多执行log次。然后就转化成第一种情况了。

数学定理

5 0
原创粉丝点击