有点混乱的标题所以我会试着更好地解释自己: 使用pascal的三角形我发现我可以使用以下等式检查数字是否是素数:
boolean isPrime= (2^(x) -2) % x == 0;
然而,因为它以2的幂运行,它变得非常快,经过一些调整我发现我可以使用以下等式x> 2:
boolean isPrime = (2^(x-1) -1 ) % x==0;
这并没有太大变化,但是在计算mod x之前,二进制数是全1(对于x = 7,它将是63,或者是二进制的111111)
现在我的问题是,是否有一种简单的方法可以利用这一点并创建一个准确的函数来确定数字是否为素数。
答案 0 :(得分:1)
不,没有简单的方法可以利用您注意到的关系来创建准确的素性测试。
例如,当 n = 561 = 3×11×17时,您的函数错误地报告 n 是素数。
您需要查看Fermat's Little Theorem和Carmichael numbers以及Miller-Rabin素性测试。