[关闭]
@ZCDHJ 2018-10-05T13:09:16.000000Z 字数 4784 阅读 997

数学 总结

数学


数学 总结

初等数论

欧拉筛法(线性筛质数)

欧拉筛法中的每个合数都只会被其最小的质因子(也可以说是最大的因子)筛去,所以复杂度是 的。

过程大概就是枚举那每一个最大的因子与最小的质因子,需要注意的是如果那个最小的质因子是另一个枚举的因子的质因数,那么后面的质因子就应不再枚举,这里令素数表为 。

如果 ,那么 的最小质因子就是 , 及后面的质数也一样,如果这时不退出的话一些数就会被重复筛去。

算术基本定理

任意一个大于 的整数 都能分解为几个质数之积,就像下面这个形式


因为这个分解是惟一的,所以这个定理又叫”唯一分解定理“。

为什么是唯一的呢?因为如果任意一个 减一,那就需要再补一个 的因子,然而 都是质数,所以分解唯一。

其实就是分解质因数。但是这个暴力枚举的复杂度是

之前说了线性筛能够保证用每一个数最小的质因子来筛去某一个数,其实就是可以 求出每个数最小的质因子,那么就可以用来加速多个数质因数分解。前几天打 cf 的时候遇到了这样的一道题。。。

一些算术基本定理的推论:

Codeforces 1047C

裴蜀定理(Bézout's identity)

对于不定方程 ,只有当 时才有整数解。

欧几里得算法

这个没啥好讲的,但我还是要证明一下。

令 为 , 为 ,。对于 任意公因数 ,, 那么 ,也就是 ,所以 的公因数集合与 的公因数集合相同。

扩展欧几里得

根据前面的裴蜀定理可知,不定方程 ,只有当 时才有整数解 。那么我们只要求出一组 的特解,就可以求出一组原方程的特解。

那么该怎么求解呢?

扩展欧几里得可以解决这个问题,求出一组 最小的解。

推导过程:

​ 我们已知 ,那么 。化简得 。因为只要求一组解,我们可以直接这样子:


那么直接递归求解就行了,至于为什么能求出一组 最小的解,我也很迷茫

更相减损术

这个算法来自《九章算数》,它原本是为约分而设计的,但适用于任何求最大公因数的问题。

  1. 可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。

请自行翻译

大概就是有两个式子

这里默认

因为对于 的任意公因数 ,,所以上式得证。

还有 ,这个式子显然成立。

在高精度下求 gcd 可考虑用更相减损术代替欧几里得。

Stein 算法

其实更相减损术很像这个 Stein 算法

众所周知,欧几里得算法求 gcd 很♂快

但是在算大整数的时候,需要试商,就会变慢。Stein 算法很好的解决了这个问题。

如果 中有一个奇数,那我们就可以将另一个数中的质因子 全部约去,因为这个时候两数的 gcd 不可能是 的倍数。

剩下的就和更相减损术差不多。

欧拉函数

欧拉函数等于 。也就是与 互质并小于 的数的个数。

算数基本定理有 ,那么 质数。

大概证明一下
的质因子 会在与 互质的数集合中筛去 个数,质因子 同理。因为一个数的质因子不会大于 ,所以 一定小于 ,那么在 中, 的倍数就会被筛去两次,所以容斥一下,答案加上 。
化简可得 。

分解 的质因数时可以求出 。

51NOD1040 最大公约数之和

然后有些性质

那么就可以线性筛出 到 内的 。

欧拉定理

如果正整数 互质,就有 。

还是如果 互质,,那么这个就可以在指数很大的时候用来降幂。

费马小定理

若 为素数,有 。

其实就是欧拉定理中的 为素数时两边乘个 。

乘法逆元

当 互质时,有一个正整数 满足 。称这个数 为 在模 意义下的乘法逆元。化简得 。想一想,前面欧拉定理是不是讲过 “如果正整数 互质,就有 。”?那么 就是 的乘法逆元,直接上快速幂。当然也可以用扩展欧几里得来求方程 的解。

但是还有一种线性递推逆元的办法。

现在要求 的逆元 ,设 。。

那么有,两边乘上 得 。最后有 。也就是 。

但是这样可能求出来的逆元是个负数,所以加上个 。也就是 。那么这样子就可以线性递推出 到 范围内模 意义下的逆元了。

然后因为同余的传递性,。打个表以及根据上面的性质可以发现,其实在 的时候, 到 的逆元是有循环节的。所以在求 的逆元的时候,可以直接先把 模 。

中国剩余定理

有同余方程组


其中 两两互质。

中国剩余定理,是中国古代数学家孙子智慧的结晶,用来求解如上的一元线性同余方程组。

现在令 为 ,也就是所有 的 LCM, 为 ,,也就是 在模 下的乘法逆元。所以 ,。 这时, 就是方程组的一个特解。

方程的通解又可以表示为 。所以某些题在求最小正整数解的时候,可以直接模个 ,再加至非负整数。

TJOI2009 猜数字

扩展中国剩余定理

现在 不再互质了怎么办?

扩展中国剩余定理可以很好地解决这个问题。

先令前 个 的 LCM 为 ,假设已经求出前 个方程的一个特解 ,那么其通解可以表示为 。现在就是要求出一个 i,使得 x+ip≡a_k \pmod {m_k},这个可以用扩展欧几里得来求解。那么新迭代下来的解为 x+ip,做 n 次扩展欧几里得就可以求出整个方程组的一组特解,求最小正整数解的方法与上面一样。

【模板】扩展中国剩余定理

组合数学

组合数公式

斯特林数(Stirling number)

表示最后是上谷歌找到如何打 斯特林数 的正确姿势

第一类斯特林数

n \brack m 表示 n 个不同元素分成 m 个圆排列的方案数。

有递推公式 {n \brack m}={n-1 \brack m}*(n-1)+{n-1 \brack m-1}。

第二类斯特林数

{n \brace m} 表示 n 个不同元素分成 m 个集合的方案数。

有递推公式 {n \brace m}={n-1 \brace m}*m+{n-1 \brace m-1}。

容斥原理

离散概率

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注