尋找 1 到指定正整數之間所有的 perfect number
程式要求:
一個正整數稱為 perfect number,
如果此數等於其因數 (不包括本身,不限為質因數) 的和。
例如:
6 是一個 perfect number 因為 6 = 1+2+3。
請撰寫一個函式 isPerfect() 來判斷傳進去的參數是否為一
perfect number。
並寫一個主程式運用這個 isPerfect()
函式來判斷自 1 到任意指定正整數之間
哪些整數是 perfect number,
將它們列印在螢幕上,
計算總共有幾個?
它們的和是多少?
"和"這個整數以十進位表示到底有幾位數?
提示:
本程式最主要讓同學練習
-
適當變數型態的使用
-
迴圈
-
條件測試敘述
-
函式
的整合應用,
在測試一整數是否為 perfect number 時,
你只需要一個一個地測試所有小於它的整數,
看看是不是可以整除它,
如果可以整除的話,
就把它加總在一個變數裡,
等到都測試完以後,
再比較這個加總的數字看看是不是等於原來的數即可。
在求一個整數以十進位表示到底有幾位數時,
你可以將此數不斷地除 10 (整數除法),
直到發現商數為 0 時為止,
除了幾次就是有幾位數字。
請注意:
-
能夠處理的數字區間要夠大,
能夠到那麼大嗎?
33550336? 8589869056? 137438691328?
為什麼可以或是為什麼不行?
-
請撰寫一個能夠測試一數字是否為 perfect number 的函式 isPerfect
-
這個程式在處理超過 10000 的數字時很花時間,
請問處理 1 到 10000 在你的機器上要花多少時間?
那麼你能不能預估 1 到 20000 大概要多少時間?
你能夠讓程式快一點嗎?