cob*_*bal 19
一个好的方法是Miller-Rabin测试.然而,应该注意,这只是一个概率测试.
use*_*810 17
Jim Sinclair已证实对七个碱基2,355,9375,28178,450775,9780504,1795265022进行了Miller-Rabin检验,以确定性地测试小于2 ^ 64的数是否为素数.看到http://miller-rabin.appspot.com/.
Ste*_*non 10
我相信渐近最快的当前(非概率)素性测试是"Lenstra/Pomerance改进的AKS",其复杂性基本上是O(n ^ 6).
但是,long long
(假设典型系统是64位整数)的范围并不是那么大.特别是,只有大约2亿个质数小于2 ^ 32,因此使用快速概率检验,然后使用预先计算的素数列表进行试验分割(或者只是查看素数列表中的数字,如果有的话)在这个范围内会非常快,并且可能是正确的方法.
我建议使用Miller-Rabin算法的GNU MP库.我已经用了几个月而且速度非常快.
具体来说,函数mpz_probab_prime_p执行此操作,您还可以使用另一个函数mpz_nextprime来查找大于数字的下一个素数.如果您愿意,我可以发布代码示例.
如果你想长期测试素数,那么Baillie PSW素性测试是一个不错的选择.该测试进行了一次强伪测试和一次Lucas测试,因此非常快.预计会有一些复合材料通过这个测试,但到目前为止还没有人知道,并且在10 15以下肯定没有例外.该测试的变体例如在Mathematica中使用.