1. 程式人生 > 其它 >梅森素數python實現

梅森素數python實現

技術標籤:藍橋杯python

這裡寫目錄標題

問題描述

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

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

思路分析及程式碼實現

這道題用python來實現的話確實很簡單,直接把數字轉成字串然後切片取出後一百位就可以了

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