1. 程式人生 > >梅森素數(JAVA BigInteger類)

梅森素數(JAVA BigInteger類)

如果一個數字的所有真因子之和等於自身,則稱它為“完全數”或“完美數”

    例如: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);
	}
	
}