尋找 1 到指定正整數之間所有的 perfect number

程式要求:

一個正整數稱為 perfect number, 如果此數等於其因數 (不包括本身,不限為質因數) 的和。 例如: 6 是一個 perfect number 因為 6 = 1+2+3。 請撰寫一個函式 isPerfect() 來判斷傳進去的參數是否為一 perfect number。 並寫一個主程式運用這個 isPerfect() 函式來判斷自 1 到任意指定正整數之間 哪些整數是 perfect number, 將它們列印在螢幕上, 計算總共有幾個? 它們的和是多少? "和"這個整數以十進位表示到底有幾位數?

提示:

本程式最主要讓同學練習

  1. 適當變數型態的使用
  2. 迴圈
  3. 條件測試敘述
  4. 函式

的整合應用, 在測試一整數是否為 perfect number 時, 你只需要一個一個地測試所有小於它的整數, 看看是不是可以整除它, 如果可以整除的話, 就把它加總在一個變數裡, 等到都測試完以後, 再比較這個加總的數字看看是不是等於原來的數即可。

在求一個整數以十進位表示到底有幾位數時, 你可以將此數不斷地除 10 (整數除法), 直到發現商數為 0 時為止, 除了幾次就是有幾位數字。

請注意:

  1. 能夠處理的數字區間要夠大, 能夠到那麼大嗎? 33550336? 8589869056? 137438691328? 為什麼可以或是為什麼不行?
  2. 請撰寫一個能夠測試一數字是否為 perfect number 的函式 isPerfect
  3. 這個程式在處理超過 10000 的數字時很花時間, 請問處理 1 到 10000 在你的機器上要花多少時間? 那麼你能不能預估 1 到 20000 大概要多少時間? 你能夠讓程式快一點嗎?

範例執行程式 I 範例執行程式 II

程式設計課程 首頁
by Pei-yih Ting
E-mail: pyting@cs.ntou.edu.tw