梅森素數(JAVA BigInteger類)
阿新 • • 發佈:2019-01-10
如果一個數字的所有真因子之和等於自身,則稱它為“完全數”或“完美數”
例如:6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
早在公元前300多年,歐幾里得就給出了判定完全數的定理:
若 2^n - 1 是素數,則 2^(n-1) * (2^n - 1) 是完全數。
其中 ^ 表示“乘方”運算,乘方的優先順序比四則運算高,例如:2^3 = 8, 2 * 2^3 = 16, 2^3-1 = 7
但人們很快發現,當n很大時,判定一個大數是否為素數到今天也依然是個難題。
因為法國數學家梅森的猜想,我們習慣上把形如:2^n - 1 的素數稱為:梅森素數。
截止2013年2月,一共只找到了48個梅森素數。 新近找到的梅森素數太大,以至於難於用一般的程式設計思路窺其全貌,所以我們把任務的難度降低一點:
1963年,美國伊利諾伊大學為了紀念他們找到的第23個梅森素數 n=11213,在每個寄出的信封上都印上了“2^11213-1 是素數”的字樣。
2^11213 - 1 這個數字已經很大(有3000多位),請你程式設計求出這個素數的十進位制表示的最後100位。
答案是一個長度為100的數字串,請通過瀏覽器直接提交該數字。
package 梅森素數; import java.math.BigInteger; public class Main { public static void main(String[] args) { BigInteger bn = new BigInteger("2"); for(int i=1;i<11213;i++) { bn=bn.shiftLeft(1); } BigInteger one = new BigInteger("1"); bn=bn.subtract(one); String str=bn+""; str=str.substring(str.length()-100); System.out.println(str); } }