Can you summarize the following document?
        
  首先介绍一个相关的引理。我们发现formula_1 和 formula_2总是得到 formula_3,我们称-1和1是formula_4的“平凡平方根”,当formula_5是素数且formula_6时,不存在formula_4 的“非平凡平方根”。为了证明该引理,首先假设formula_8是formula_4的平凡平方根,于是有  formula_10  formula_11  也就是说,素数 formula_5 能够整除 formula_13 或者formula_14,根据欧几里得引理,formula_15 或者 formula_16能够被 formula_5 整除,即 formula_18 或 formula_19,  即 formula_8 是 formula_4 的平凡平方根。  现在假设formula_22是一个素数,且 formula_23。于是formula_24是一个偶数,可以被表示为formula_25 的形式,formula_26和formula_27都是正整数且formula_27是奇数。对任意在formula_29 范围内的 formula_30 和formula_31,必满足以下两种形式的一种:  formula_32 formula_33  因为由于 费马小定理,对于一个素数formula_22,有  formula_35  又由于上面的引理,如果我们不断对formula_36取平方根后,我们总会得到 1 或 -1。如果我们得到了 -1,意味着2式成立,formula_22 是一个素数。如果我们从未得到 -1,那么通过这个过程我们已经取遍了所有2的幂次,即1式成立。  米勒-拉宾素性测试就是基于上述原理的逆否,也就是说,如果我们能找到这样一个 formula_30,使得对任意formula_31以下两个式子均满足:  formula_40formula_41那么 formula_22 就不是一个素数。这样的 formula_30 称为 formula_22 是合数的一个凭证(witness)。否则 formula_30 可能是一个证明 formula_22 是素数的“强伪证”(strong liar),即当formula_22确实是一个合数,但是对当前选取的 formula_30 来说上述两个式子均不满足,这时我们认为formula_22是基于formula_30的大概率素数。  每个奇合数 formula_22 都有很多个对应的凭证 formula_30,但是要生成这些 formula_30 并不容易。当前解决的办法是使用概率性的测试。我们从集合formula_29中随机选择非零数 formula_30,然后检测当前的 formula_30 是否是 formula_22 为合数的一个凭证。如果 formula_22 本身确实是一个合数,那么大部分被选择的 formula_30 都应该是 formula_22 的凭证,也即通过这个测试能检测出 formula_22 是合数的可能性很大。然而,仍有极小概率的情况下我们找到的 formula_30 是一个“强伪证”(反而表明了 formula_22 可能是一个素数)。通过多次独立测试不同的 formula_30,我们能减少这种出错的概率。  对于测试一个大数是否是素数,常见的做法随机选取基数formula_30,毕竟我们并不知道凭证和伪证在formula_66这个区间如何分布。典型的例子是 Arnault 曾经给出了一个397位的合数formula_22,但是所有小于307的基数formula_30都是formula_22是素数的“强伪证”。不出所料,这个大合数通过了 Maple 程序的codice_1 函数(被判定为素数)。这个函数通过检测 formula_70 这几种情况来进行素性检验。

  假设我们需要检验 formula_71 是否是一个素数。首先formula_72,于是我们得到了formula_73和formula_74.我们随机从formula_75中选取formula_30,假设formula_77,于是有:  formula_78formula_79因为我们得到了一个 -1,所以要么formula_71确实是一个素数,要么formula_77是一个“强伪证”。我们再选取formula_82,于是有:  formula_83formula_84即formula_82是formula_71为合数的一个凭证,而formula_77是一个“强伪证”。  选取特定的整数可以在一定范围内确定(而非单纯基于概率猜测)某个整数是质数还是合数。对于小于formula_88的情形,选取formula_89共三个凭据可以做到这一点;对于小于formula_90的情形,选取formula_91共七个凭据可以做到这一点。

  这一算法可以被表示成如下伪代码:  使用,这个算法的时间复杂度是formula_92,formula_93是我们测试的不同的 formula_30 的值。也就是说,这是一个高效的多项式时间算法。使用快速傅里叶变换能够将这个时间推进到 O("k" log"n" log log "n" log log log "n") = Õ("k" log"n").  如果我们加入最大公因数算法到上述算法中,我们有时候可以得到 formula_22 的因数,而不仅仅是证明 formula_22 是一个合数。例如,若 formula_22 是一个基于formula_30 的可能的素数,但不是一个大概率素数,则formula_99或formula_100将得到 formula_22 的因数。如果因式分解是必要的,这一formula_102算法可以加入到上述的算法中,代价是增加了一些额外的运算时间。  例如,假设 formula_103,则formula_104.于是formula_105,这也告诉我们 formula_22 不是一个大概率素数,即 formula_22 是一个合数。如果这个时候我们求最大公因数,我们可以得到一个formula_103的因数:formula_109.这时可行的,因为formula_103是一个基于2的伪素数,但不是一个“强伪素数”。

  下面是根据以上定义而使用Magma语言编写的“米勒-拉宾”检验程序。
米勒-拉宾质数判定法是一种质数判定法则,利用随机化算法判断一个数是合数还是"可能是"素数。卡内基梅隆大学的计算机系教授Gary Lee Miller首先提出了基于广义黎曼猜想的确定性算法,由于广义黎曼猜想并没有被证明,其后由以色列耶路撒冷希伯来大学的Michael O. Rabin教授作出修改,提出了不依赖于该假设的随机化算法。