用Python求完美數

2021-09-24 10:56:40 字數 1761 閱讀 9849

整段**基本上是面向過程的函式式程式設計思維。。。

第一段自定義函式is_perfnum是用來判斷是否為完美數的,引用 一下某度百科的完美數的定義:

完全數(perfect number),又稱完美數或完備數,是一些特殊的自然數。它所有的真因子(即除了自身以外的約數)的和(即因子函式),恰好等於它本身。如果乙個數恰好等於它的因子之和,則稱該數為「完全數」。第乙個完全數是6,第二個完全數是28,第三個完全數是496,後面的完全數還有8128、33550336等等。 

思路: 

我們可以通過取余得零來找出乙個數的所有真因子,再將這些真因子求和看是否等於這個數。

這樣就可以判斷這個數是否是完美數了。

第二段自定義函式flag():

我想實現這樣乙個功能,即當計算出乙個完美數後,系統詢問你是否要繼續計算下乙個完美數。

因此自定義了flag函式用於判斷是否繼續生成。

思路:雙層while迴圈就可以搞掂了,最外層迴圈條件為鍵盤鍵入y/n。

內層迴圈條件為是否是完美數。

這樣當程式跳出內層迴圈時,就會判斷是否繼續外層迴圈,這時候就可以提醒你鍵入y/n啦

最後主函式部分:

變數 i 即為需要判斷是否完美的數,每次迴圈過後會進行自加。

需要注意的是,在外層迴圈的最後一句也需要進行一次 i 的自加。

因為當 i 為完美數時,內層迴圈中的 i = i + 1不會被執行,因此 i 的值始終是完美數的值。

這樣的話,當第一次求得完美數之後,i 始終不滿足內層迴圈的條件,就無法繼續生成接下來的完美數了。

所以,為了下一次運算做準備,在外層迴圈的最後一句也需要進行一次 i 的自加。

行文囉嗦。。。

直接上**好了。。。

# -*- coding: utf-8 -*-

'求完美數'

import os

def is_perfnum(x): #判斷x是否是完美數

l = # 建立列表儲存因子

for n in range(1,x): # 找出乙個數的所有因子

if x % n == 0:

if sum(l) == x: # 列表求和判斷完美數

print('%s is perfect number.'%x)

return true

else:

return false

def flag(): # 判斷是否繼續

print('continue? (y/n)')

yn = str.upper(str(input())) # 把輸入的字元先轉化為string,然後再全變為大寫

if yn =='y':

return true

elif yn =='n':

print('exiting program!')

os.system("pause")

return false

else:

print("error, wrong character!")

return false

if __name__=='__main__':

i = 1

while(flag()):

while(not is_perfnum(i)):

i = i + 1 # 不是完美數時,i + 1 測試下一位數

i = i + 1 # 是完美數時,跳出內迴圈並 i + 1,為下一次進入迴圈做準備

找完美數python

完美數又稱為完全數或完備數,它的所有的真因子 即除了自身以外的因子 的和 即因子函式 恰好等於它本身,例如6 1 2 3 28 1 2 4 7 14 def perfect lower,upper 找出lower upper之間的所有完美數 完美數是除自身外其他所有因子的和正好等於這個數本身的數 例...

求規定範圍內的完美數

輸入 檔名稱 sum123.cpp 作 者 林海雲 完成日期 2014年12月24日 版 本 號 v2.0 問題描述 求規定範圍內滿足條件的完美數。6的所有真約數是1 2 3,而且6 1 2 3。像這樣,乙個數所有真約數的和正好等於這個數,通常把這個數叫做完美數 程式輸入 m x n且輸入0 0結束...

python 求相鄰數

什麼是相鄰數?比如5,相鄰數為4和6,和5相差1的數,連續相差為1的一組數 需求 遍歷inputlist 所有數字,取出所有數字,判斷是否有相鄰數,不相鄰數字 和 相鄰數字 都以 陣列 形式 新增到 outputlist 中,並且 每個 陣列 裡 第一位 遞減 補全兩位數,末位 遞增 補全兩位數,每...