通过检查n是否除2 ^ n-2来对n进行原始性检验

时间:2017-10-04 16:27:05

标签: java

所以我的问题是如何实现这个公式:正整数n(大于1)是一个素数,当且仅当n除以2 ^ n-2。到目前为止,我想出了这个代码,但我被卡住了。我是新手,只是开始学习java,任何帮助都会很棒,谢谢!

JsonConvert.SerializeObject(dataTable.AsEnumerable().Select(r => r.ItemArray));

这是我感到困惑的地方。

1 个答案:

答案 0 :(得分:3)

计算2 n -2然后测试可分性的直接方法显然是完全不可扩展的。幸运的是,我们可以在整个过程中以模n为模,这样就不会有大数字。这个概念证明无论如何都使用BigInteger,因为它有modPow的方便实现,没有它就可以重写。

static boolean isProbablyPrime(int n) {
    BigInteger bigN = BigInteger.valueOf(n);
    BigInteger two = BigInteger.valueOf(2);
    BigInteger t = two.modPow(bigN, bigN);
    return t.longValue() == 2;
}

我重命名了这个函数,因为它传递了一些非素数,例如评论中提到的561。

ideone上试用。