Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 确定性地检查一个大数是素数还是复合数?_C++_Algorithm_Math_Primality Test - Fatal编程技术网

C++ 确定性地检查一个大数是素数还是复合数?

C++ 确定性地检查一个大数是素数还是复合数?,c++,algorithm,math,primality-test,C++,Algorithm,Math,Primality Test,我正在寻找一种算法来测试大数(比如10200)的素性。 有好的算法吗 理想情况下,我更喜欢一种不是概率论的算法 注意:数字的位数超过50位,少于200位。如果您正在寻找非概率测试,您可能需要查看,该测试大约在O(log6 n)时间内运行。对于您拥有的位数,这可能是可行的 也就是说,概率素性测试非常好,许多测试的错误率都是指数级的。我建议使用其中一种,除非有充分的理由不这样做 编辑:我刚找到。我不知道它们是否正确工作,但它们可能是一个很好的起点 希望这有帮助 通常我们会使用可能的基本测试。我推荐,

我正在寻找一种算法来测试大数(比如10200)的素性。 有好的算法吗

理想情况下,我更喜欢一种不是概率论的算法


注意:数字的位数超过50位,少于200位。

如果您正在寻找非概率测试,您可能需要查看,该测试大约在O(log6 n)时间内运行。对于您拥有的位数,这可能是可行的

也就是说,概率素性测试非常好,许多测试的错误率都是指数级的。我建议使用其中一种,除非有充分的理由不这样做

编辑:我刚找到。我不知道它们是否正确工作,但它们可能是一个很好的起点


希望这有帮助

通常我们会使用可能的基本测试。我推荐,如果您想要更确定的话,您可以在后面进行测试和/或一些随机的基础米勒-拉宾测试。这将比运行一些验证实现更快、更可靠

假设你说这还不够好。然后你真的想使用并获得证书。合理的实现是或。这些可以在不到一秒钟的时间内证明200位数字的素性,并返回一个可以独立验证的证书

这是另一个合理的方法。缺点是它不返回证书,因此您信任该实现——如果实现正确,您将得到一个“是”或“否”输出,该输出是确定正确的。Pari/GP使用APR-CL及其
isprime
命令,David Cleaver有一个优秀的开源实现:。这些实现已经在各种软件中进行了一些代码审查和日常使用,所以应该是好的

这是一种在实践中使用的可怕方法。它不返回证书,也不太难找到损坏的实现,这完全违背了使用证明方法而不是良好的可能素数测试的观点。它的速度也非常慢。就我所知,200位数字远远超过了任何实现的实际点。在前面提到的ECPPDJ软件中有一个“快速”的,所以你可以尝试一下,还有很多其他的实现可以找到

对于速度的一些想法,这里是一些实现的时间。我不知道有任何AKS、APR-CL或BPSW的实现比所示的更快(如果您知道,请评论)。Primo开始时比ecpp dj显示的稍慢,但在500位左右时速度更快,并且有更好的斜率。它是大输入(2000-30000位)的首选程序


只要在维基百科上查一下就可以了。但我可能会使用概率算法。您可以获得指数级的错误概率,因此与硬件错误的概率相比,测试本身导致错误的概率很小。关于AKS算法:此算法使用log()和sqrt()函数处理大数字(如10^200)。实现这一目标代价高昂。概率测试很好,谢谢!我会用它!计算
sqrt(10^200)
的成本有多高?