1. 程式人生 > >103、完美數

103、完美數

對於一個 正整數,如果它和除了它自身以外的所有正因子之和相等,我們稱它為“完美數”。

給定一個 正整數 n, 如果他是完美數,返回 True,否則返回 False

示例:

輸入: 28
輸出: True
解釋: 28 = 1 + 2 + 4 + 7 + 14

注意:

輸入的數字 n 不會超過 100,000,000. (1e8)

思路很簡單,除了本身和其餘,注意的是1應該返回false,並且迴圈範圍可以縮小點

class Solution {
    public boolean checkPerfectNumber(int num) {
        
		if(num == 1 || num == 0){
			return false;
		}
		if(num == 2 || num == 3 || num == 4){
			return false;
		}
		int tem = num * 2;
		for (int i = 1; i * i < num ; i++) {
			if(num % i == 0){
				int j = num / i;
				tem = tem - j - i;
		
				if(tem < 0  ){
					break;
				}
				
			}
		}
		if(tem == 0){
			return true;
		}else {
			return false; 
		}
    }
}

效率還挺高的
在這裡插入圖片描述

排行靠前的程式碼

class Solution {
    public boolean checkPerfectNumber(int num) {
        return num==6||num==28||num==496||num==8128||num==33550336;
    }
}

其實這個程式碼利用的是
這樣就可以直接判斷是不是了,給出了一個優化的思路,哈哈哈哈
1e8以內只有5個完美數