简单的数学笔记

1.约数之和

令 $p_k\in\mathbb P$,$a^k\in\mathbb Z^+$。

则大于 1 的正整数 $n$ 可以表示为以下形式(质因数分解)。

$n=\prod \limits_{k=0}^mp_k^{a_k}$

此时 $n$ 的所有约数之和为:

$\prod \limits_{k=0}^m\frac{1-p_k^{a_k+1}}{1-p_k}$

求值最坏时间复杂度约为 $O(\log n)$。

2.曼哈顿距离与切比雪夫距离的互化:

在平面上有点 $A$,$B$,其曼哈顿距离为 $|A_i-B_i|+|A_j+B_j|$。切比雪夫距离为 $\max(|A_i-B_i|,|A_j+B_j|)$。

欲将曼哈顿距离于切比雪夫距离转换,可以考虑切比雪夫距离所在的平面旋转 45 度。

设原坐标为 $(x,y)$ 则旋转后坐标为 $(\frac{x}{\sqrt{2}}+\frac{y}{\sqrt{2}},-\frac{x}{\sqrt{2}}+\frac{y}{\sqrt{2}})$。
将坐标有理化得 $(x+y,-x+y)$。

此时原坐标系中的两点的切比雪夫距离等于现在的坐标系中的曼哈顿距离除以 2。

3.Millar Robin判断素数

由费马小定理我们得知:对任意素数 $p$ 和与其互质的整数 $a$,有 $a^{p-1}\equiv 1(\mod p)$。

我们可以考虑,随机选取一小于 $p$ 的整数 $a$,若 $a^{p-1}\equiv 1(\mod p)$,则可以证明
$p$ 是素数。

但这种想法显然是错的。

那我们又考虑,如果多随机选取几个
$a$ 的话能否提高正确率?

但仍旧存在极少的一些合数,即便遍历
$[2,p-1]$ 的每一个数字作为底数,也无法筛去。

不难证明,这样的数的个数有无穷多个。

故单纯的费马小定理显然不行,我们现在来考虑如何减小错误概率。

引理一:对于质数 $p$ 若 $x^2\equiv 1(\mod p)$,则小于 $p$ 的解只有两个 $x_1=1,x_2=p-1$。

这个定理有什么用呢?

由Fermat检测得到 $a^{p-1}\equiv 1(\mod p)$,且 $p-1$ 为偶数,则 $a^{p-1}$ 就相当于 $x^2$。

将其拆分为 $(a^{\frac{p-1}2})^2\equiv 1$,就可以用引理一来判断了。

如果 $p-1$ 为奇数,我们就将 $p-1$ 转化成 $k * 2^t$ 即可($k$ 为奇数)。

接下来考虑代码的实现。

首先是底数的选取:Miller Rabin检测依旧有错误的概率。但通过选取适合的底数,可以避免这一情况的发生。

在long long范围内,选取 $\{2,325,9375,28178,450775,9780504,1795265022\}$ 七个数作为底数可保证100%正确。

最坏时间复杂度约为 $O(\log^3n)$。

posted @ 2024-12-14 21:42  _Acheron  阅读(4)  评论(0编辑  收藏  举报