子題2(8%):如果有一個正整數n,其值等於所有n 的因數(除了n 以外)之總合,則n 稱
為「完美數」(Perfect number)。在此計算中,其「因數」不限制為「質因數」。請輸出2 到數
字k 之間的完美數。
輸入說明:
第1 行有1 個數字,代表k 的值。而k 的值不超過50000。
輸出說明:
每行輸出1 個範圍內的完美數,依其值由小到大輸出。
輸入範例:【檔名:in-5-2.txt】
10000
輸出範例:【檔名:out-5-2.txt】
6
28
496
8128
執行花了4秒
回覆刪除Private Sub Form_Load()
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, K
For i = 2 To K
If AB(i, 0) = True Then Print #2, i
Next i
Close #2
Close #1
End
End Sub
Function AB(A, B)
For i = 1 To (A - 1)
If (A Mod i) = 0 Then B = B + i
Next i
If A = B Then AB = True
End Function
佑好,
回覆刪除程式正確,但是,
function中的第2個參數,沒有意義。用1個參數即可。
(另注,在function(或sub)中的新生的變數,只在這個function中活著,一離開就不見了,下次再進來,重新生出一個。)
佑好,
回覆刪除回頭又看到你說「執行4秒」,雖然應該不會被捉,但是,很慢。
改進點,
b=1
for i = 2 to a\2
這樣等於,少掉一半的計算了。因為1一定是因數,因為大於一半的,沒有因數了。
熊掌好,
回覆刪除對吼。
因為大於一半的,沒有因數了。
Function AB(A)
B = 1
For i = 2 To A \ 2
If (A Mod i) = 0 Then B = B + i
Next i
If A = B Then AB = True
End Function