所以我的问题是如何实现这个公式:正整数n(大于1)是一个素数,当且仅当n除以2 ^ n-2。到目前为止,我想出了这个代码,但我被卡住了。我是新手,只是开始学习java,任何帮助都会很棒,谢谢!
JsonConvert.SerializeObject(dataTable.AsEnumerable().Select(r => r.ItemArray));
这是我感到困惑的地方。
答案 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上试用。