学习笔记:数论

0x00 前言

本文(可能)包含的内容:

  1. 学习数论的前置知识
  2. 各类数论函数与其性质(和证明)
  3. 如何使用各类筛求积性函数值
  4. 在 OI 题目中的应用

参考资料:

阅读本文您应该有初中数学水平,如果没有建议阅读初一至初三的数学书。

如果文中有数学记号或专有名词您不懂其意思,请看 0xF0 附件。

0x01 数学杂项

狄利克雷卷积

定义:对于两个数论函数 f,g,他们的狄利克雷卷积 (fg)(n)=d|nf(n)g(nd),即 (fg)(n)=ab=nf(a)g(b)

性质:两个积性函数 f,g 的狄利克雷卷积也是积性函数。

证明:设 hf,g 的狄利克雷卷积,即 h(n)=d|nf(n)g(nd)gcd(x,y)=1

h(x)h(y)=i|xf(i)g(xi)j|yf(j)g(yj)=i|xj|yf(i)f(j)g(xi)g(yj)=i|xj|yf(ij)g(xyij)=d|xyf(d)g(xyd)=h(xy)

证毕。

0x10 数论函数

本 part 记录了几种常见的数论函数及其性质(和证明),有一些过于简单的会放在 0xF2 中。

0x11 欧拉函数

欧拉函数,符号为 φ,意为 φ(n)=i=1n1[gcd(i,n)=1],即所有小于 n 的数中有几个数和 n 互质。

接下来是性质(和证明),设 pprime

性质1φ(p)=p1,证明显然。

性质2φ(pk)=pkpk1(kZ+)

证明:pk 有且仅有质因数 p,而比它小的 pk11 个数中,也存在几个数含有质因数 p

p,2p,3p,,(pk11)p,一共有 pk11 个数。

于是在 1pk1 中,与 pk 互质的数的个数为 (pk1)(pk11)=pkpk1

证毕。

性质3φ(ax)=aφ(x)(a|x)

性质4φ(x)φ(y)=φ(xy)(gcd(x,y)=1),所以欧拉函数是积性函数。

性质5:设 n 的质因数分解为 i=1mpiai,那么 φ(n)=ni=1m(11pi)

性质6d|nφ(d)=n

证明:设 f(n)=d|nφ(d),当 gcd(x,y)=1 时:

f(x)f(y)=i|xφ(i)×j|yφ(j)=i|xj|yφ(i)φ(j)=i|xj|yφ(i×j)=d|xyφ(d)=f(xy)

所以 f 是积性函数,那么设 n 的质因数分解为 i=1mpiai,由 f 是积性函数可得:

f(n)=i=1mf(piai)

由性质2,可得 f(pc)=φ(1)+φ(p)+φ(p2)++φ(pc)=1+(p1)+(p2p)++(pcpc1)=pc

所以 f(n)=i=1mf(piai)=i=1mpiai=n

原命题得证。

证毕。

0x12 莫比乌斯函数

莫比乌斯函数,符号为 μ,定义如下:

{1n=1(1)mn=i=1mpiai,a1n=10otherwise

性质1μ(x)μ(y)=μ(xy)(gcd(x,y)=1)

证明:如果 x=1y=1,显然。

如果 μ(x)=0μ(y)=0,显然。

否则 μ(x)μ(y)=(1)mx(1)my=(1)mx+my=μ(xy)

证毕。

性质2d|nμ(d)=ϵ(n)

证明:与欧拉函数的性质6证明类似。

0x20 筛法

本 part 记录了几种常见的筛法筛积性函数和素数的方法。

0x21 埃拉托斯特尼筛法(埃氏筛)

筛质数

考虑如果一个数 x 是合数,那么 x 的倍数也是合数,所以如果我们从小到大考虑每个数,然后同时把当前这个数的所有(比自己大的)倍数记为合数,那么运行结束的时候没有被标记的数就是素数了。

CI N = 2e5; bool Mx[N + 5];
void Eratosthenes (int n) {
	RI i, j; Mx[1] = 1; for (i = 2; i <= n; ++ i) if (! Mx[i]) for (j = 2; i * j <= n; ++ j) Mx[i * j] = 1;
}

时间复杂度 O(nloglogn)

0x22 线性筛(欧拉筛)

考虑到埃氏筛一个合数可能被筛多遍,如果省掉无意义的步骤,复杂度就降为 O(n) 了。

筛质数

CI N = 2e5; int P[N + 5], Nt; bool Mx[N + 5];
void Euler (int n) {
	RI i, j; for (i = 2; i <= n; ++ i) for (! Mx[i] && (P[++ Nt] = i), j = 1; j <= Nt && i * P[j] <= n; ++ j) if (Mx[i * P[j]] = 1, ! (i % P[j])) break;
}

筛欧拉函数

根据欧拉函数的如下性质:

  • φ(p)=p1(pprime)
  • φ(x×p)=φ(x)×p(px)
  • φ(x×p)=φ(x)×(p1)(gcd(p,x)=1)

可以在筛质数的同时筛出欧拉函数。

CI N = 1e5; int P[N + 5], Pt, phi[N + 5], n; bool Mx[N + 5];
void C (int d)
{
	RI i, j; phi[1] = 1; for (i = 2; i <= d; ++ i) for (! Mx[i] && (P[++ Pt] = i, phi[i] = i - 1), j = 1; j <= Pt && i * P[j] <= d; ++ j) {
		if (Mx[i * P[j]] = 1, ! (i % P[j]) && (phi[P[j] * i] = phi[i] * P[j], 1)) break;
		else phi[i * P[j]] = phi[i] * (P[j] - 1);
	}
}

筛莫比乌斯函数

CI N = 1e5; int P[N + 5], Pt, mu[N + 5], n; bool Mx[N + 5];
void C (int d)
{
	RI i, j; mu[1] = -1; for (i = 2; i <= d; ++ i) for (! Mx[i] && (P[++ Pt] = i, mu[i] = -1), j = 1; j <= Pt && i * P[j] <= d; ++ j) {
		if (Mx[i * P[j]] = 1, ! (i % P[j]) && (mu[P[j] * i] = 0, 1)) break;
		else mu[i * P[j]] = -mu[i];
	}
}

0x30 例题

P2158 [SDOI2008] 仪仗队

思路

显然,如果一个坐标 (x,y)gcd(x,y)1,那么这个点一定会被 (xgcd(x,y),ygcd(x,y)) 这个点挡住。那么,这个式子就很显然了:

x=1ny=1n[gcd(x,y)=1]

这个式子可以拆成三部分:

x=1ny=1x1[gcd(x,y)=1]+x=1ny=xx[gcd(x,y)=1]+x=1ny=x+1n[gcd(x,y)=1]

其中因为对于所有 (x,x) 的点,都会被 (2,2) 挡住,所以中间这部分为 1。由图像可知,式子前后两部分是对称的,所以这个式子可以化简为:

2x=1ny=1x1[gcd(x,y)=1]+1

y=1x1[gcd(x,y)=1] 这部分刚好是 φ 的定义,所以最终式子为:

2x=1nφ(x)+1

可以先线性筛筛出 1n 的欧拉函数,然后 O(n) 统计答案。

P2398 GCD SUM

i=1nj=1ngcd(i,j)(0)

通过欧拉函数的性质,可以将这个式子化简为:

(0)=i=1nj=1nd|gcd(i,j)φ(d)=i=1nj=1nd|i,d|jφ(d)=i=1nj=1nd=1nφ(d)[d|i][d|j]=d=1nφ(d)i=1nj=1n[d|i][d|j]=d=1nφ(d)nd2

这样就可以 O(n) 解决问题了,可以再套一个整除分块,但是 n105,所以没必要。

P3455 [POI2007]ZAP-Queries

假设 ba,那么题目显然让我们求

i=1aj=1b[gcd(i,j)=x]

x 除掉,得:

i=1axj=1bx[gcd(i,j)=1]

根据莫比乌斯函数的性质,得:

i=1axj=1bxd|gcd(i,j)μ(d)

d 改为枚举 d 的形式,得:

i=1axj=1bxd=1axμ(d)[d|gcd(i,j)]

发现 d=1axμ(d) 可以提到前面去,得:

d=1axμ(d)i=1axj=1bx[d|gcd(i,j)]

如果 [d|gcd(i,j)]=1,那么 i,j 都要是 d 的倍数,于是得:

d=1axμ(d)axdbxd

由于有多组数据,所以套一个整除分块,复杂度 O(Tn),其中 T 为数据组数,nmin(a,b)

0xF0 附件

0xF1 算式中出现的符号及其含义

符号 含义 例子
xy,xy 前者为 y 整除 x,即 xy 的因数;后者与前者相反 12,26,420,34,49
gcd(x,y) xy 的最大公因数 gcd(2,4)=2,gcd(3,7)=1
求和,具体见例子 i=1nai=a1+a2++an,dnd=n
求积,具体见例子 i=1nai=a1×a2××an
所有满足某条件的数 xyx 的取值范围为 y 的因数,或 y 的因数集合
[A] 如果 A 为 false,那么 [A]=0;如果 A 为 true,那么 [A]=1 [23]=0,[gcd(2,4)=2]=1,[1=0]=0
x 向下取整 1.2=1,4.9=4,5=5

0xF2 描述中出现的专有名词或字母含义

  • 数论函数: 指在整数集中定义的函数。
  • 积性函数:如果数论函数 f,对于满足 gcd(x,y)=1x,yf(x)f(y)=f(xy) ,那么 f 就是一个积性函数。
  • Z:指整数集,Z+ 指正整数集。
  • ϵ:单位函数,定义为 ϵ(1)=1,ϵ(n)=0(n2)
  • Id:单位函数,定义为 Id(n)=n
posted @   ClapEcho233  阅读(137)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示