我从标准输入读取了一个正整数N,我试图弄清楚N是否是素数。
我知道我可以将N除以所有正数达到sqrt(N),但这很费时,我的算法会不时给出误报,所以我正在寻找一种启发式方法来解决这个问题。 / p>
我记得去年我在拼贴画中学到了一个选择数字的算法,然后检查N是否可被该数字整除(或者它的因子),如果没有,那么它可以告诉N是素数,但它会错误地将它确定为大约1/40的时间。
有人认识到我正在谈论的算法吗? 链接到它会非常有帮助。
答案 0 :(得分:4)
嗯,有一些概率算法,有些在wikipedia page中有描述,很可能你在谈论 Miller-Rabin Fermat Primality Test
请注意,自2002年以来,实际上有一个O(log(n)^ 6)确定性方法来确定一个数字是否为素数 - 称为AKS(在其开发者之后) 1 < / p>
这是一个有趣的问题 - 很多人认为素数测试不能在输入的大小(即n
中的对数)中进行多项式确定,也不能确定性地进行,但是他们的方法也是如此。