我想解決項目歐拉#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'? –