【问题标题】:is there a way to check binary divisibility when the integer is all ones?当整数全为1时,有没有办法检查二进制整除性?
【发布时间】: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 将不实用)。费马的检验不是很好,但与其相关的想法导致了米勒-拉宾检验,该检验在实践中大量使用。

标签: math primes


【解决方案1】:

不,没有简单的方法可以利用您注意到的关系来创建准确的素性测试。

例如,如果 n = 561 = 3 × 11 × 17,您的函数会错误地报告 n 是素数。

您需要查看Fermat's Little TheoremCarmichael numbers 以及Miller-Rabin 素性测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-26
    • 2012-03-25
    • 2013-07-23
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多