100%确定性的快速素性测试?

Roo*_*kie 5 c++ algorithm math primes gmp

我正在使用GMP(使用MPIR)来获取任意大小的数据类型.我也使用它的素数测试函数,它使用米勒 - 拉宾方法,但它不准确.这是我想要解决的问题.

通过使用暴力方法,我能够确认数字18446744073709551253是素数.

有没有办法检查大数是否为素数,准确度是否达到100%?

  • 它不应该使用太多的内存/存储空间,可以接受几兆字节.

  • 它应该比我使用的sqrt方法更快.

  • 它适用于大小至少为64位或更大的数字.

  • 最后,它应该是100%准确,没有maybes!

我有什么选择?

我可以忍受蛮力方法(对于64位数字),但出于兴趣,我想要更快更大.此外,64位数字检查太慢:总共43秒!

tem*_*def 6

对于非常大的数字,AKS素性测试是在时间O(log 7.5 n log log n)中运行的确定性素性测试,其中n是感兴趣的数量.这比O(√n)算法快得多.但是,该算法具有较大的常数因子,因此在您的数字变得相当大之前它是不实用的.

希望这可以帮助!