1. 程式人生 > 其它 >LQBv10-Python-梅森素數

LQBv10-Python-梅森素數

技術標籤:LQBpython

2013/Province_Java_A/3/梅森素數

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

例如: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位。

解題思路:
切片操作。

程式碼:

print(str(2 ** 11213 - 1)[-100:])

# 輸出結果如下
8586718527586602439602335283513944980064327030278104224144971883680541689784796267391476087696392191