507. 完美数 直接求解&数学理论


507. 完美数 直接求解&数学理论

查看原题

解题思路(直接求因子)

直接循环找出每一个正因子相加判断

代码

/**
 * @param {number} num
 * @return {boolean}
 */
var checkPerfectNumber = function(num) {
	if(num ===1 ){
		return false;
	}
	let sum  = 1;
	for(let i = 2;i <= Math.floor(Math.sqrt(num));i++){
		if(num % i === 0){
			sum += num/i + i;
		}
	}
	if(sum === num){
		return true;
	}else{
		return false;
	}
};

解题思路(数学理论)

根据欧几里得-欧拉定理,每个偶完全数都可以写成

$$2p-1(2p -1)$$

的形式,其中 $p$ 为素数且 $2^p-1$也是素数

由于目前奇完全数还未被发现,因此题目范围 [1,108][1,108] 内的完全数都可以写成上述形式。
这一共有如下 5 个:
6, 28, 496, 8128, 33550336

代码

var checkPerfectNumber = function(num) {
    return num === 6 || num === 28 || num === 496 || num === 8128 || num === 33550336;
};