Python編程算法【二十四】 完數(shù)
【案例內(nèi)容】?
如果一個數(shù)恰好等于他的因子之和,這個數(shù)就稱為“完數(shù)”。例如,6的因子為1、2、3,且6=1+2+3,因此6就是"完數(shù)"。請找出1000以內(nèi)的所有完數(shù)。
【解題思路】
解決本題的第一步,就是找出一個數(shù)的所有因子(也叫因數(shù))。假設(shè)有一個數(shù)num,在找它的因子時,可以用for循環(huán),從1到num,逐一判斷是否能被該數(shù)整除。但實(shí)際上,只要判斷從1到 num//2 即可(//表示整除)。舉個例子,要找出8的因子,只需判斷數(shù)字1-4,能否被8整除即可;要找出9的因子,只需判斷1-4,能否被9整除即可(9//2=4);利用數(shù)學(xué)常識,其實(shí)只要超過該數(shù)的一半,就肯定不能被該數(shù)整除。接著第二步,把找到的因子全部存放到一個列表中,因?yàn)槔昧斜淼?sum 函數(shù),我們便能快速求得所有因子的總和,最后判斷該數(shù)與其因子之和是否相等,即可求出該數(shù)是否為完數(shù)。
【Python代碼】

本題在求和的時候,之所以要借助列表,就是想利用列表的 sum 函數(shù)來快速求和。當(dāng)然也可以用累加的方式求和,方法很多,根據(jù)個人的習(xí)慣選擇。感覺用 sum 代碼會更簡潔一些哈。
標(biāo)簽: