我想解决项目欧拉#97问题。我不想在网上看,因为他们直接提供解决方案。项目欧拉97
这里的练习:
第一个已知的主要发现,超过一万位在1999年被发现 ,是形式2^6972593-1的梅森素数;它包含正好2,098,960位数字。随后发现其他Mersenne 质数为2^p-1的形式,其中包含更多数字。
然而,在2004年发现了一个巨大的非梅森素数 包含2,357,207个数字:28433×2^7830457 + 1。
查找此素数的最后十位数字。
所以,我尝试这样做:
public static void main(String []args){
BigInteger i = new BigInteger("28433")
.multiply(new BigInteger(String.valueOf(Math.pow(2, 7830457)))
.add(new BigInteger("1")));
String s = i.toString();
System.out.println(s.substring(s.length()-10, s.length()));
}
显然不起作用:
Exception in thread "main" java.lang.NumberFormatException: For input string: "Infinity"
我应该如何解决这个问题(我真的卡住)? (请不要给予解决,只是暗示)
感谢
代替'Math.pow'使用'BigInteger'的POW方法缺失的一个因素。 –
而不是Math.pow或BigInteger.pow,使用BigInteger.powMod。或者只需使用mod。 –
@PeterLawrey什么是'BigInteger.powMod'? –