定義
如果一個數恰好等于它的真因子之和,則稱該數為“完全數” [2]。各個小于它的約數(真約數,列出某數的約數,去掉該數本身,剩下的就是它的真約數)的和等于它本身的自然數叫做完全數(Perfect number),又稱完美數或完備數。
例如:第一個完全數是6,它有約數1、2、3、6,除去它本身6外,其余3個數相加,1+2+3=6。第二個完全數是28,它有約數1、2、4、7、14、28,除去它本身28外,其余5個數相加,1+2+4+7+14=28。第三個完全數是496,有約數1、2、4、8、16、31、62、124、248、496,除去其本身496外,其余9個數相加,1+2+4+8+16+31+62+124+248=496。后面的完全數還有8128、33550336等等。
python代碼
生成10000以內的完全數
for i in range(1, 10000):s = 0for j in range(1, i):if i % j == 0:s += jif s == i:print(i)
6
28
496
8128
梅森素數
古希臘數學家歐幾里得在名著《幾何原本》中證明了素數有無窮多個,并論述完全數時提出:如果2^P-1是素數(其中指數P也是素數),則2^(P-1)(2^P-1)是完全數。瑞士數學家和物理學家歐拉證明所有的偶完全數都有這種形式。因此,人們只要找到2P-1型素數,就可以發現偶完全數了。數學界將2P-1型素數稱為“梅森素數”(Mersenne prime),因為法國數學家和法蘭西科學院奠基人梅森在這方面的研究成果較為卓著。梅森素數貌似簡單,但探究難度卻極大。它不僅需要高深的理論和純熟的技巧,而且還需要進行艱巨的計算。到2018年為止,人類僅發現51個梅森素數。
def is_prime(n):if n <= 1:return Falseif n <= 3:return Trueif n % 2 == 0 or n % 3 == 0:return Falsei = 5while i * i <= n:if n % i == 0 or n % (i + 2) == 0:return Falsei += 6return Truemersenne_primes = []
for p in range(2, 14): # 2^14 - 1 > 10000, so we stop at 13mersenne_candidate = 2**p - 1if is_prime(mersenne_candidate):mersenne_primes.append(mersenne_candidate)mersenne_primes
執行上述Python代碼后得到的10000以內的梅森素數列表是:[3,7,31,127,8191]