📜  原始性测试|第三组(米勒-拉宾)(1)

📅  最后修改于: 2023-12-03 15:22:51.259000             🧑  作者: Mango

原始性测试|第三组(米勒-拉宾)

Miller Rabin

简介

原始性测试是一个判断一个数是否为质数的算法。第三组原始性测试,也称米勒-拉宾算法(Miller-Rabin),是最常用的原始性测试算法之一。它的特点是简单易懂、实现简单、速度快。相较于传统的试除法,它在实际应用中更为广泛。

算法原理

米勒-拉宾算法基于的数论结论是费马小定理:对于任何质数$p$和整数$a$,有$a^{p-1} \equiv 1 \pmod{p}$。利用费马小定理可以得到一个随机数$a$的$p-1$次方模$p$的余数,它要么等于1,要么等于-1(也就是$p-1$),如果$a^{p-1} \not \equiv 1 \pmod{p}$ 且 $a^{(p-1)/2} \not \equiv \pm 1 \pmod{p}$ 那么$p$一定是合数。

这个算法要使用一个随机选取的整数$a$,因为对于大部分合数不止有一个符合以上条件的整数,随机选取更能保证准确性。

算法步骤
  1. 将$n$ - 1 分解为 $2^{r}d$,其中 $d$ 为奇数。
  2. 选择一个随机整数$a \in [2, n-2]$。
  3. 计算 $a^{d}, a^{2d}, ..., a^{2^{r-1}d}$。
  4. 如果存在 $i \in [0, r-1]$,满足 $a^{2^{i}d} \equiv -1 \pmod{n}$,则认为 $n$ 可能是质数,结束算法。
  5. 如果对于所有 $i\in[0,r-1]$,都有 $a^{2^{i}d} \not \equiv - 1 \pmod{n}$,则认为 $n$ 是合数,结束算法。

重复进行多次以上过程,即可大大提高正确性。