【提高级】数论

前言

前段时间在补提高大纲,补完之后这篇博客用来记录梳理复盘提高大纲里数论的一些知识点,有错误欢迎批判捏。

欧拉函数

定义

φ(n) 表示小于等于 n 中与 n 互质的数的个数,即 φ(n)=d=1n[gcd(d,n)=1].

性质

1. 积性函数

根据这一条性质,我们可以用线性筛法来筛出欧拉函数。

2. 若 n=pk,其中 p 为一个质数,则 φ(n)=pkpk1.

证明

根据定义可知,更详细一点说,若存在一个数 x 满足 gcd(x,n)1,那么一定有 p|x,因此我们可以稍微用一点容斥的思想,pk 即是全集,而 pk1 则是不符合 gcd(x,n)=1x 的数量,相减即可得出答案。

3. 由唯一分解定理可得,n=i=1spiki,其中 p 为素数,那么可得 φ(n)=n×i=1spi1pi.

证明

由性质一、性质二可得:

φ(n)=i=1sφ(piki)=i=1s(pi1)×piki1=i=1spiki×(11pi)=n×i=1s(11pi)=n×i=1spi1pi

根据这一条,我们可以单点求欧拉函数,在推柿子的时候也经常用到,算是比较重要的一条性质。

ll phi(ll x) { ll res=x; for(ll i=2;i*i<=x;i++) { if(!(x%i)) { res=res/i*(i-1); while(!(x%i)) x/=i; } } if(x>1) res=res/x*(x-1); return res; }

4. n=d|nφ(d)

证明

gcd(k,n)=d,那么可以得到 gcd(kd,nd)=1,我们把这个结论称为结论一。

f(x) 表示 gcd(k,n)=x 的数的个数,那么 n=i=1nf(i).

由结论一可得 n=i=1nφ(ni)n=d|nφ(nd).

因为 dnd 具有对称性,所以 n=d|nφ(d).

这一条目前没遇到什么应用,不过了解一下也是好的。

一位大佬说可用于欧拉反演,但是我不会(逃,等会了再扩充。

欧拉定理

定义

gcd(a,m)=1,则 aφ(m)1(modm).

证明

r1,r2rφ(m) 为模 m 意义下的一个简化剩余系,则 ar1,ar2arφ(m) 也为模 m 意义下的一个简化剩余系,所以 r1r2rφ(m)ar1ar2arφ(m)aφ(m)r1r2rφ(m)(modm),约分就可得 aφ(m)1(modm).

注:
剩余类:对于同一个整数 n,其余整数模 n 后有 0n1n 种情况,其中余数相同的称为同一剩余类。
简化剩余类(完全剩余系):在每一个剩余类中取一个数,构成的集合称为简化剩余类。
简化剩余系:从完全剩余系中取出 φ(n) 个与 n 互质的数所构成的集合。

费马小定理

定义

p 为素数,gcd(a,p)=1,则 ap11(modp).

证明:

因为 p 为素数,所以 φ(p)=p1,由欧拉定理可得 aφ(p)1(modp),故 ap11(modp).

费马小定理在求乘法逆元时有用。

威尔逊定理

定义

对于素数 p(p1)!1(modp).

证明

我们可以分为两种情况讨论:

  1. p=2 时,有 (p1)!=1,显然有 11(modp),因此威尔逊定理在 p=2 时成立。

  2. p 为任意的奇素数时,1p1 均存在逆元且唯一,对于每一个数 x,若满足 xx1(modp),就可得 x×x1=1,因此 (p1)!modp 就等于逆元等于其本身即满足 x=x1(modp) 的数的乘积,因为 p 为素数,所以这样的数只有 1p1,而 (p1)modp=1,威尔逊定理成立。

裴蜀定理(贝祖定理)

定义

a,bZa,b 不全为 0,则 x,yZ 使 ax+by=gcd(a,b).

证明

我们可以分为两种情况讨论。

  1. a=0b=0,则 gcd(a,b)=ab,定理显然成立。

  2. a,b0,因为 gcd(a,b)=gcd(a,b)=gcd(a,b)=gcd(a,b),所以我们假设 a,b>0,ab,gcd(a,b)=d.

    我们可以将等式两边同除 d,可以得到 a1x+b1y=1,其中 gcd(a1,b1)=1.
    令辗转相除法在除到互质时退出,则 rn=1,可得:

    rn2=xnrn1+1

    1=rn2xnrn1

    rn1=rn3xn1rn2

    1=(1+xnxn1)rn2xnrn3

    我们不断这么带入可以逐渐消去 rn2r1,可以证得 a1x+b1y=1,所以定理成立。

扩展欧几里得算法(exgcd)

exgcd 一般用于求解线性同余方程,而逆元也是一类特殊的线性同余方程。

基本思路

假设我们要求解不定方程 ax+by=gcd(a,b),其中 x,y 为未知数,那么我们可以在 a=gcd(a,b),b=0 时得到一组解 x=1,y=0,然后通过这一组特殊解来步步回溯求出原式的解。

其中不定方程 ax+by=m 有整数解的充要条件是 gcd(a,b)|m.

如何回溯

首先根据欧几里得算法可得:

ax+by=gcd(a,b)=gcd(b,amodb)=gcd(b,aabb)=bx0+(aabb)y0

又因为 gcd(b,aabb)=bx0+(aab)y0=bx0+ay0abby0

所以可以得到: ax+by=bx0+ay0abby0=ay0+b(x0aby0).

所以可以用 x=y0,y=x0aby0 来不断迭代更新回溯。

ll exgcd(ll a,ll b,ll &x,ll &y) { if(!b) { x=1,y=0; return a; } ll res=exgcd(b,a%b,x,y); ll t=x;x=y,y=t-a/b*y; return res; }

解系扩展

x0,y0 为不定方程 ax+by=n 的一组解,那么该不定方程的任意解可以表示为:

{x=x0+yky=y0ak

其中 kZ

而一般题目会让我们求最小整数解,那么 x=(xmodt+t)modt,其中 t=bgcd(a,b).

模意义下的乘法逆元

定义

若一个线性同余方程 ax1(modb),则 x 称为 amodb 的逆元,记作 a1.

exgcd 求解

很明显我们可以将该线性同余方程改写为 ax+by=1,用 exgcd 求解即可。

费马小定理求解

因为 ax1(modb),又因为由费马小定理可得 axab1(modb),所以 xab2(modb),可以用快速幂求解。

线性求逆元

可以用来求解 1n 在模 p 意义下的逆元。

首先我们有 111(modp) 恒成立,故 1 的逆元为 1.

接下来我们要求解 i1,我们令 k=pi,j=pmodi,因为 p=ki+j,所以 ki+j0(modp).

同余式两边同乘 i1×j1 可得 kj1+i10(modp),移项得 i1kj1(modp),即 i1pi(pmodi)1(modp).

综上:

i1{1,if i=1pi(pmodi)1,else (modp)

在代码实现时 pi 写作 ppi,防止出现负数。

inv[1]=1; for(ll i=2;i<=n;i++) inv[i]=(p-p/i)*(inv[p%i])%p;

线性求任意 n 个数的逆元

先计算 n 个数的前缀积,记作 si,然后计算 sn 的逆元记作 svn,很明显每次乘上 ai 就可以得到 a1ai1 的积逆元,即 svi1=svi×ai,所以 ai1=si1×svi,时间复杂度 Θ(n+logp).

线性同余方程

定义

形如 axb(modn) 的方程称为线性同余方程,其中 x 为未知数。

逆元求解

gcd(a,n)=1 时,可以计算 a1,然后方程两边同乘 a1 可得唯一解。

证明

xba1(modp)

gcd(a,n)1 时,不一定有解。

d=gcd(a,n),当 db 时无解。

db,则同除 d 可得 axb(modn),此时 gcd(a,n)=1,可用逆元求解,而原方程有 d 个解,xix+in(modn)(0id1).

exgcd 求解

线性同余方程可以改写为 ax+ny=b 的形式。

中国剩余定理(CRT)

作用

可用于求解形如以下的一元线性同余方程组,其中 n1,n2,,nk 两两互质。

{xa1(modn1)xa2(modn2)xak(modnk)

基本思路

先计算所有模数的积记作 n,对于第 i 个方程,计算 mi=nni,然后再计算 mi1,计算 ci=mimi1,此时不要模 ni,方程组的唯一解为 x=i=1kaici(modn).

证明

ij 时,有 mj0(modni),故 cjmj0(modni),又因为 cimi×(mi1modni)1(modni),所以:

xj=1kajcjaiciaimi(mi1modni)ai(modni)

所以该求法的正确性得证。

for(int i=1;i<=n;i++) { scanf("%lld%lld",&a[i],&b[i]); Mul*=a[i]; } for(int i=1;i<=n;i++) { M[i]=Mul/a[i]; ll x=0,y=0; exgcd(M[i],a[i],x,y); if(x<0) x+=a[i]; ans+=(b[i]*M[i]*x); }

__EOF__

本文作者Scorilon
本文链接https://www.cnblogs.com/Scorilon/p/17666127.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Scorilon  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示