2011年8月15日 星期一

傳統數學問題的解決(99模擬) -2

子題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 則留言:

  1. 執行花了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

    回覆刪除
  2. 佑好,
    程式正確,但是,
    function中的第2個參數,沒有意義。用1個參數即可。
    (另注,在function(或sub)中的新生的變數,只在這個function中活著,一離開就不見了,下次再進來,重新生出一個。)

    回覆刪除
  3. 佑好,
    回頭又看到你說「執行4秒」,雖然應該不會被捉,但是,很慢。
    改進點,
    b=1
    for i = 2 to a\2
    這樣等於,少掉一半的計算了。因為1一定是因數,因為大於一半的,沒有因數了。

    回覆刪除
  4. 熊掌好,
    對吼。
    因為大於一半的,沒有因數了。

    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

    回覆刪除