C++ 程序执行 Baillie-PSW 素数测试

2025 年 2 月 8 日 | 阅读 3 分钟

在本文中,您将学习如何在 C++ 中实现Baillie-PSW 素性测试及其示例。

Samuel S. Wagstaff, Jr.、John SelfridgeColin P. L. Bailey 开发了被称为 Baillie-PSW 素性测试的概率素性测试。该测试通过结合 Miller-Rabin 和 Lucas 伪素数测试的元素,提供了一种准确的方法来确定数字的素性。

1. Miller-Rabin 素性测试

  • 这个概率素性测试以费马小定理为基础。它检查许多随机基数,以确定给定整数 n 是素数的概率。
  • 该测试使用不同的随机基数重复进行,并包含模幂运算以提高准确性。
  • 如果测试显示一个数字是合数,则该数字通常总是正确的。
  • 当测试用更多随机基数重复进行时,误识别为素数的概率会迅速降低。

2. Lucas 伪素数测试

  • Lucas 测试是一种确定性测试,它使用递归生成的序列,称为 Lucas 序列,作为测试的基础。
  • 该测试对具有特殊形式的数字(例如梅森数)特别有效。
  • 虽然是确定性的,但由于其复杂性和有限的适用性,它不常使用。

3. Baillie-PSW 测试

  • Baillie-PSW 测试Miller-RabinLucas 测试结合在一起。
  • 它除了 Miller-Rabin 测试外,还确定给定数字是否通过 Fibonacci 或 Lucas 测试。
  • 如果一个数字通过了这两个测试,它就很可能是素数。

示例

让我们举一个例子来说明 C++ 中的 Baillie-PSW 素性测试

输出

Enter a number to check for primality: 3
3 is a Prime Number.

说明

这个 C++ 程序实现了 Baillie-PSW 素性测试,用于确定给定数字是否为素数。它使用 Miller-Rabin 素性测试,通过几个随机基数来检查合数。它还检查该数字是否符合 Lucas 或 Fibonacci 伪素数的要求。在要求用户输入一个数字后,应用程序使用 Baillie-PSW 测试函数来确定整数的素性。最后,根据测试结果,它输出输入的整数是素数还是合数。对 q 参数的调整控制 Miller-Rabin 测试的准确性,平衡精度与计算时间。