Python 完全數(Perfect Number)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

筆者有用C++來解高中生解題系統上的 高中生程式解題系統:c032: 00382 - Perfection
(題目連結:https://zerojudge.tw/ShowProblem?problemid=c032) 一題。而筆者在解台中女中程式解題系統(Green Judge)中的「a044盈數、虧數和完全數 -- 迴圈應用」一題,是用迴圈從判斷1到 N/2 是否為 N 的因數,若是則加總(s)。接著比較加總結果與 N的大小關係來輸出對應的訊息。(那有沒有更好的演算法呢?)

此次換用 Python 程式語言來解,演算法如下:
找出此數的所有因數。
將所有因數加總。
判斷加總與此數之間的大小關係。
Python程式碼:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import sys
    
msg = {0:"PERFECT", 1:"ABUNDANT", -1:"DEFICIENT"}
  
def checkPerfection(n):
    sum = 0
    for i in range(1, (n // 2) + 1, 1):
        if( n % i == 0 ):
            sum += i

    if( n == sum ):
        return 0
    elif( n > sum ):
        return -1
    elif( n < sum ):
        return 1

num = []
n = 1
for s in sys.stdin:
    tn = list(map(int,s.split()))
    for n in tn:
        if n == 0:
            break
        num.append(n)

    if n == 0:
        break
    
print('PERFECTION OUTPUT')

for n in num:
    ret = checkPerfection(n)
    print("%5d  %s" % (n, msg[ret]))

print('END OF OUTPUT')

沒有留言: