日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python判断是否为完全数_Python识别完美数

發(fā)布時間:2025/3/11 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python判断是否为完全数_Python识别完美数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

完美數(shù)

完美數(shù)(perfect number,又稱完全數(shù))指,它所有的真因子(即除了自身以外的因子)和,恰好等于它自身。

第一個完美數(shù):6,

第二個完美數(shù):28,

第三個完美數(shù):496,

第四個完美數(shù):8128,

第五個完美數(shù):33550336,

.......

2 探索

在茫茫數(shù)海中,第五個完美數(shù)(33550336)要大得多,居然藏在千萬位數(shù)的深處!它在十五世紀被人們發(fā)現(xiàn),計算機問世后,借助這一有力工具,數(shù)論愛好者們繼續(xù)探索。

笛卡爾曾公開預(yù)言:“能找出的完美數(shù)是不會多的,好比人類一樣,要找一個完美人亦非易事。”

時至今日,人們一直沒有發(fā)現(xiàn)有奇完美數(shù)的存在。于是是否存在奇完美數(shù)成為數(shù)論中的一大難題。只知道即便有,這個數(shù)也是非常之大,并且需要滿足一系列苛刻的條件。

經(jīng)過不少數(shù)學(xué)家研究,到2013年為止,一共找到了48個完美數(shù)。

3 有趣性質(zhì)

1. 目前發(fā)現(xiàn)的完美數(shù)都是以6或8結(jié)尾,會不會有奇完全數(shù)存在?如果存在,它必須大于10^300,至今無人能回答這些問題。

2. 所有的完美數(shù)都是三角形數(shù)。例如:6=1+2+3

28=1+2+3+...+6+7

8128=1+2+3…+126+127

3. 所有完美數(shù)的倒數(shù)都是調(diào)和數(shù)。例如:1/1+1/2+1/3+1/6=2

1/1+1/2+1/4+1/7+1/14+1/28=2

1/1+1/2+1/4+1/8+1/16+1/31+1/62+1/124+1/248+1/496=2

4. 可以表示成連續(xù)奇立方數(shù)之和。除6以外的完全數(shù),都可以表示成連續(xù)奇立方數(shù)之和,并規(guī)律式增加。例如:28=13+3^3

496=1^3+3^3+5^3+7^3

8128=1^3+3^3+5^3+……+15^3

33550336=1^3+3^3+5^3+……+125^3+127^3

4 判斷

如何判斷是為否完美數(shù)呢?在計算機數(shù)值型可以表達的的范圍內(nèi),我們可以嘗試找一找。

這是一道leetcode題(No.507),我前段時間寫過一個解,在leetcode平臺上已通過:class Solution:

def checkPerfectNumber(self, num: int) -> bool:

sum = 1

tmp = num

if num == 0 or num==1:

return False

while num%2 == 0:

num /= 2

sum += num+tmp/num

return sum==tmp

已知完美數(shù)都以6或8結(jié)尾,所以才有了上面的方法,注意這不是尋找一個數(shù)所有因子的方法。使用6或8結(jié)尾這個小trick,實現(xiàn)更高效( > 95.26%),但不嚴謹。

很遺憾,今天我發(fā)現(xiàn)這是一個錯誤的解法,雖然在Leetcode上已經(jīng)通過。原因如下,我們試圖打印盡可能多的完美數(shù):import sys

if __name__ == "__main__":

s = Solution()

i,j = 0,0

while(i

isPerfect = s.checkPerfectNumber(i)

if isPerfect is True:

j+=1

print("第%d個完美數(shù): %d"%(j,i))

i+=1

第1個完美數(shù): 6

第2個完美數(shù): 28

第3個完美數(shù): 120

第4個完美數(shù): 496

第5個完美數(shù): 2016

第6個完美數(shù): 8128

第7個完美數(shù): 32640

第8個完美數(shù): 130816

第9個完美數(shù): 523776

第10個完美數(shù): 2096128

很明顯,120不是一個完美數(shù),因此,可以確定Leetcode平臺遺漏了這些cases,已經(jīng)將此問題提交到Leetocode,如下所示:

5 正解

如果遍歷所有的小于num的數(shù),check是否為其因子,時間復(fù)雜度為o(n),在平臺上提交會超時。

一種更好的解法,時間復(fù)雜度為O(sqrt(n)), 因為num的兩個因子:num_i和num_j,假設(shè)num_i < num_j ,則 num_i 的最大值為 sqrt(num), 所以我們只需要遍歷到sqrt(num)即可。

代碼如下:class Solution:

def checkPerfectNumber(self, num: int) -> bool:

if num <= 0:

return False

i, sum = 1, 0

while i*i <= num:

if num % i == 0:

sum += i

if i*i != num:

sum += num / i

i += 1

return sum - num == num

6 更多完美數(shù)

6. 8,589,869,056

7. 137,438,691,328

8. 2,305,843,008,139,952,128

9. 2,658,455,991,569,831,744,654,692,615,953,842,176

10. 191,561,942,608,236,107,294,793,378,084,303,638,130,997,321,548,169,216

11. 13,164,036,458,569,648,337,239,753,460,458,722,910,223,472,318,386,943,117,783,728,128

12. 14,474,011,154,664,524,427,946,373,126,085,988,481,573,677,491,474,835,889,066,354,349,131,199,152,128

……

……

47 ……2^42643800 X (2^42643801-1)

48 ……2^57885160 X (2^57885161-1)

由于后面數(shù)字位數(shù)較多,例子只列到12個,第13個有314位。

到第39個完全數(shù)有25674127位數(shù),據(jù)估計它以四號字打出時需要一本字典大小的書。

推薦閱讀:

點個好看

總結(jié)

以上是生活随笔為你收集整理的python判断是否为完全数_Python识别完美数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。