简单的数学笔记

1.约数之和

pkPakZ+

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

n=k=0mpkak

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

k=0m1pkak+11pk

求值最坏时间复杂度约为 O(logn)

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

在平面上有点 AB,其曼哈顿距离为 |AiBi|+|Aj+Bj|。切比雪夫距离为 max(|AiBi|,|Aj+Bj|)

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

设原坐标为 (x,y) 则旋转后坐标为 (x2+y2,x2+y2)
将坐标有理化得 (x+y,x+y)

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

3.Millar Robin判断素数

由费马小定理我们得知:对任意素数 p 和与其互质的整数 a,有 ap11(modp)

我们可以考虑,随机选取一小于 p 的整数 a,若 ap11(modp),则可以证明
p 是素数。

但这种想法显然是错的。

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

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

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

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

引理一:对于质数 px21(modp),则小于 p 的解只有两个 x1=1,x2=p1

这个定理有什么用呢?

由Fermat检测得到 ap11(modp),且 p1 为偶数,则 ap1 就相当于 x2

将其拆分为 (ap12)21,就可以用引理一来判断了。

如果 p1 为奇数,我们就将 p1 转化成 k2t 即可(k 为奇数)。

接下来考虑代码的实现。

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

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

最坏时间复杂度约为 O(log3n)

posted @   _Acheron  阅读(7)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
多行不义必自毙。