【发布时间】:2017-10-11 14:07:18
【问题描述】:
标题有点混乱,所以我会尝试更好地解释自己: 使用帕斯卡三角形,我发现我可以使用以下等式检查一个数字是否为素数:
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)
现在我的问题是,是否有一种简单的方法可以利用这一点并创建一个准确的函数来确定一个数字是否是素数。
【问题讨论】:
-
您刚刚重新发现了费马检验:en.wikipedia.org/wiki/Fermat_primality_test 请注意,2^(x-1) % x == 1 不能证明 x 的素数。
-
阅读
modular exponentiation by squaring。这种事情可以非常有效地完成(否则 RSA 将不实用)。费马的检验不是很好,但与其相关的想法导致了米勒-拉宾检验,该检验在实践中大量使用。