#素性 #质数 #数论 #素性检验 #无std #整数

nightly 无std ssmr

针对小整数的单次Miller-Rabin素性检验

1个稳定版本

1.0.0 2024年6月14日

#9 in #素性检验

CC0 许可证

43KB
648

SSMR

SSMR(Single-Shot Miller-Rabin)是一种仅使用单个强费马检验来检查某个数是否为素数的算法。与相关的Machine-prime一样,它提供了两个函数,is_prime和is_prime_wc。is_prime针对平均情况进行优化,除了费马检验外,还使用试除法。is_prime_wc针对检查质数的最坏情况进行优化,但它可能会通过合数。这是因为检查是否能被2整除非常快,而且仅对奇数合数进行测试,我们可以将测试间隔加倍。此外,由于is_prime_wc的大多数应用永远不会遇到偶数合数,这也是事实。

与Machine-prime一样,它也是使用F-Analysis构建的,但由于原始算法已更改,因此它可能无法重现(也不需要,因为证明正确性比重新计算要快得多)。

属性

  • 界限 - 2^40或109万亿
  • is_prime_wc偶数合数通过 - 36
  • is_prime平均复杂度 - 0.21xFermat
  • is_prime_wc最坏/平均复杂度 1.0xFermat
  • 与大多数素性检验不同,这两个函数都被彻底证明与文档中的描述完全一致,这是由于间隔很小且速度很快才得以实现。
  • SSMR似乎是迄今为止单次Miller-Rabin检验的最大间隔,之前的记录比这个间隔小256倍以下

应用

is_prime

  • 在区间内测试其他素性检验
  • 确定特定形式的质数

is_prime_wc

  • 测试筛法。筛法可以非常快速地生成大量质数,因此使用一个验证质数快速的测试是理想的
  • 测试可能质数,例如部分分解的结果

可能的研究应用

  • 寻找Carmichael数。Webster和Shallue计算了直到10^22的Carmichael数,由于因子不能大于sqrt(n),因此SSMR可以用来找到10^24的Carmichael数。
  • 生成用于构建素性检验的特殊半质数,例如形式为(ak+1)(k+1)的数

缺点

遗憾的是,SSMR(斯梅尔定理)目前存在一个上限,这阻碍了其在严肃研究中的应用。专门设计的筛法在几乎所有应用中都将优于SSMR,主要的障碍在于设计这样的筛法的难度。此外,像Kim Walisch的primesieve这样的通用筛法已经能够几乎瞬间筛出高达2^40的数,这使得SSMR在生成某些区间内的素数(机器素数用途)方面实际上变得无用。

这个问题意味着SSMR目前仅限于娱乐应用,然而这可能对于大多数非专业应用来说已经足够。除了研究之外,很少需要每秒生成90万个素数。

无运行时依赖