数学 : 从入门到入土

目录#

  • 一点前置知识

  • 数论函数,莫比乌斯反演与卷积

  • 生成函数

  • 同余与乘法逆元

  • 组合数学

  • 期望与概率

前置知识#

元,单位元和逆元#

首先,这三个概念都是对于一个特定的运算而言的.

元就是运算的要素,在加减乘除里就是数,在狄利克雷卷积里就是数论函数,在矩阵乘法里就是矩阵.

单位元满足如下性质:

对于一个运算op(x,y),定义单位元I使得op(x,i)=op(i,x)=x.

例如在加法,单位元就是0,乘法单位元为1,矩阵乘法单位元为单位矩阵I,狄利克雷卷积单位元为单位元函数ε(x)=[x=1].

快速幂#

对于一个幂xp,存在能在O(logn)时间复杂度去计算它的方式.

考虑p的奇偶.

xp={xp2×xp2 (p | 2)xp2×xp2×x (p|  2)

即可.

代码实现求a×bmodp :

ll qpow(ll a,ll b,ll p) {
	ll res = 1;
    while(b) {
    	if(b & 1) res = res * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return res;
}

常用符号#

ϕ,空集.

LATEX:$\phi$

φ,欧拉函数.

LATEX:$\varphi$

[表达式],艾佛森约定,即如果中括号内表达式为真则为1,为伪则为0.

LATEX:$[ ]$

μ,莫比乌斯函数

LATEX:$\mu$

x下取整.

LATEX:$\lfloor \rfloor$

x上取整.

LATEX:$\lceil \rceil$

数论函数,莫比乌斯反演与卷积#

数论分块/整除分块#

用于将带下取整(形如nk)的合式从Θ(n)优化到Θ(n).

对于一个数n使得nk=p,不难发现对于一个特定的区间使得k[l,r]都有同样的p与之对应.

比如n=10,p=2,使得k[4,5]时,nk=p均成立,于是求出每个块左右端点就可以简化求下取整的过程.

例题#

P2261 [CQOI2007]余数求和

题意简单到离谱:

给出n,k,求

i=1nkmodi

作为求和指标的i以模数的形式出现实在是十分奇妙.

szq巨神曾言道:式子都是越推越复杂然后解出来的

考虑模的意义:

kmodi=kiki

式子化为:

i=1nkiki=nki=1niki

其中后一部分可以靠数论分块求得.

具体实现#

首先要确定分母n和左端点l.

这时候我们要找到一个最大的r,使得

nl=nr

根据数论分块,有:

r=nnl

即可完成分块.

对于下一块,将上一块的右端点+1作为其左端点,重复此过程即可.

例题代码#

int mian() {
	ll n = read(),k = read();
	ll ans = n * k;
	for(ll l = 1,r;l <= n;l = r + 1) {
		if(k / l) r = std::min(k / (k / l),n);
		else r = n;
		ans -= (k / l) * (r - l + 1) * (l + r) / 2;
	}
	write(ans);
	return 0;
}

数论函数#

定义域为正整数集N的函数.

常见的数论函数:

阶乘#

n!=i=1ni

数列#

{ai}

#

nλ

积性函数#

一种特殊的数论函数,满足对于整数i,j,当gcd(i,j)=1,有:

f(ij)=f(i)f(j)

显然这条特性对于一个质数i的函数值被求出后可以拓展到更多函数值.

完全积性函数:

对于所有整数i,j,

f(ij)=f(i)f(j)

常见的积性函数 :

欧拉函数#

φ(x),代表[1,x]里与x互质的数的个数

显然对于一个质数p,有φ(p)=p1

void EulerPrime(int n) {
	phi[1] = 1;
	ff(i,2,n) {
		if(!vis[i]) {
			phi[i] = i - 1;
			prime[pcnt++] = i;	
		}
		ff(j,0,pcnt - 1) {
			if(1ll * i * prime[j] > N)
				break;
			vis[i * prime[j]] = 1;
			if(i % prime[j])
				phi[i * prime[j]] = phi[i] * (prime[j] - 1);
			else {
				phi[i * prime[j]] = phi[i] * prime[j];
        		break;
			}
		}
	}
}

莫比乌斯函数#

μ(x)={1(n=1)0(n含有平方因子)(1)k,kn的本质不同因子个数

这个定义十分令人迷惑.

由于唯一分解定理,每个自然数n都可以表示成:

n=i=1kpici

其中p为质数.

那么莫比乌斯函数可以表示为:

μ(x)={1(n=1)0( i,ci2)(1)ci otherwise.

单位元函数#

ε(n)=[n=1]

这个函数在狄利克雷卷积中作为单位元存在,即:

对于一个数论函数f(x),fε=f

例题#

积性函数在OI中的地位体现在可以用线性筛在Θ(n)复杂度内求出.

P3383 【模板】线性筛素数

模板中的模板,欧拉筛法.

相比于O(nloglogn)的埃拉托色尼筛法更加的快捷,代码量也不大.

原理是使一个合数总是被自己的最小质因数筛掉,防止像埃氏筛一样出现合数被多次标记的情况.

P2158 [SDOI2008] 仪仗队

考虑什么情况下会导致看不见另一个人.

将左下角的点和其他点连线,考虑每一个点对连线的斜率.

对于一个斜率tanθ=ba,有最小的gcd(a,b)=1使得其他斜率相同的连线形成的三角形都是其位似,即被最初这一对a,b所阻挡.

于是对于坐标(i,j),有gcd(i,j)=1(i,j)\footnotesize为可见点

枚举每个横坐标,则这个横坐标对答案贡献为与其互质的纵坐标个数,这是对于下半部分等腰直角三角形的贡献,那么答案为:

1+2i=1n1φ(i)

线性筛即可.

狄利克雷卷积#

函数卷起来了

更多例题#

给出n,求:

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

多倍经验:

P2398 GCD SUM

UVA11426 拿行李(极限版) GCD - Extreme (II)

SP3871 GCDEX - GCD Extreme

UVA11424 GCD - Extreme (I)

P1390 公约数的和

有些要忽略重复贡献,稍微减一下即可.

突然发现这好像是欧拉反演,不过这不要紧

众所周知,欧拉函数有一条奇妙的性质:

n=d|nφ(d)

然后还有gcd的奇妙性质,于是我们把gcd套进前面的式子.

gcd(n,m)=d|gcd(n,m)φ(d)=d|nd|mφ(d)

好像很棒的样子.

现在我们带回原式吧.

i=1ni=1ngcd(i,j)=i=1ni=1nd|id|jφ(d) \footnotesize式子太恶心,套一个艾佛森约定清爽一下=i=1ni=1nd=1nφ(n)[d|i][d|j]=d=1nφ(d)i=1nj=1n[d|i][d|j] \footnotesize交换求和顺序=d=1nφ(d)i=1n[d|i]j=1n[d|j]=d=1nφ(d)ndnd

就这么结束了.

求欧拉函数O(n),然后直接枚举d即可.

当然可以整除分块,如果使用PowerfulNumber筛求前缀和的话就是O(n).

P1447 [NOI2010] 能量采集

是不是和仪仗队那道题特别像

这道题的特点是行数和列数不相等,于是重新从斜率的角度出发.

首先,点(i,j)对答案没有贡献(即连线上没有植物)的条件是gcd(i,j)=1.

考虑如何计算损失.

众所周知,有一种东西叫做位似.

显然点(i,j)(0,0)的路径上有gcd(i,j)1个整点.

于是其贡献转化为2(gcd(i,j)1)+1=2gcd(i,j)1

易得总贡献为:

i=1nj=1m(2gcd(i,j)1)=nm+2i=1nj=1mgcd(i,j)

考虑如何计算二重合式的部分.

现在仍然是把欧拉反演的结论套上去,参考上一题即可:

i=1ni=1mgcd(i,j)=i=1ni=1md|id|jφ(d)=i=1ni=1md=1max(n,m)φ(n)[d|i][d|j]=d=1max(n,m)φ(d)i=1nj=1m[d|i][d|j]=d=1max(n,m)φ(d)i=1n[d|i]j=1m[d|j]=d=1max(n,m)φ(d)ndmd

同样的套路.

P3935 Calculating

简单的数学基础

巨佬们说的数学"直觉"

小学五年级学生都会的奥数

强大坚实的打表功力

看不出来你AFO吧

就能看出,这个公式是求:

i=lrd(i)

其中d(x)为因数个数函数(除数函数).

一个简单的想法就是直接线性筛,可以直接得到70分,可喜可贺,可喜可贺.

尝试找到更优的解法,众所周知1014=107,于是考虑有没有根号级复杂度的算法.

考虑枚举因数,在一个区间[1,n]中,数i作为因子出现的次数为ni,于是转化为前缀和相减的形式即可用数论分块求解了.

即:

i=1rnii=1l1ni

生成函数#

又名母函数.

普通生成函数 (OGF)#

对于一个数列 <an> 定义其普通生成函数为 :

A(x)=n=0anxn

举个例子 : 对于斐波那契数列 :

f0=0,f1=1fn=fn1+fn2

做其 OGF 为 :

F(x)=i=0fnxn

考虑递推式,其中有 fn1 项与 fn2 项,试构造恒等关系,使得其中对于高位部分 fn1fn2fn分别对齐.

构造xF(x),相当于把无限合式向右移动一位,构造 x2F(x) , 相当于把无限合式右移 2 位.

n 0 1 2 3 4
F(x) f0x0 f1x1 f2x2 f3x3 f4x4
xF(x) 无0次项 f0x1 f1x2 f2x3 f3x4
x2F(x) 无0次项 无1次项 f0x2 f1x3 f2x4

这时考虑F(x)=xF(x)x2F(x)是否成立,显然对于n=2以上均成立,考虑 n=1,0两项.

可得新恒等关系:

F(x)=x2F(x)+xF(x)+x

于是 :

F(x)=11xx2

那么如何求出通项 ?

考虑待定系数法 :

11xx2=A1ax+B1bx11xx2=AAbx+BaBx(1ax)(1bx)

于是列出方程组 :

{A+B=0AbaB=0a+b=1ab=1

求解即可

{A=15B=15a=1+52b=152

可以发现 a是著名的 黄金分割 ,这时候可以记 aϕbϕ^

于是 :

F(x)=15(11ϕx11ϕ^x)

根据幂级数展开,得到 :

15(11ϕx11ϕ^x)=15(n=0ϕnxnn=0ϕ^nxn)=n=0ϕnϕ^n5xn

那么根据之前生成函数的定义,可知系数就是通项,于是 :

fn=ϕnϕ^n5

比起什么矩阵啊,特征方程啊,简单又好证,非常的套路化,可以套模板.

这就是生成函数的好处.

常用 OGF 与 OGF 变形方式#

质数生成函数 (EGF)#

狄利克雷生成函数 (DGF)#

同余与乘法逆元#

组合数学#

醒醒,你连数都数不明白

期望与概率#

posted @   AstatineAi  阅读(123)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示
主题色彩