JavaScript 求1000以内的完数(完美数)

1、什么是完数(完美数)?

 

完数,一般指完全数,一个自然数如果它的所有真因子(即除了自身以外的约数)的和等于该数,那么这个数就是完全数,如:6的真因子有1 、2、3,6=1+2+3,所以6是一个完全数。

 

2、思路

 

1)首先由于完美数的定义,需要排除自身,所以数字 1一定不是完美数;


2)其次我们需要计算 num 除了它自身以外的所有正因子之和 sum,正因子必然是成对出现的,故而我们只需要遍历到 num 的平方根 sqrt 即可。

  • 以 36 为例,它的非自身外正因子有,1、2、3、4、6、9、12、18,其中 1 和 6 单独计算,[2, 18]、[3, 12]、[4, 9]都是对应关系、
  • 所以只需要遍历到 36 的平方根 6 就可以获取全部正因子。
  • 1 单独计算的原因是要排除自身,6 单独计算的原因是 6 * 6 = 36,两个值相同,故而只能计算一遍。

3)时间复杂度:O(\sqrt{n}),n 为 num 的大小

 

3、JavaScript实现代码

 

let arr=[];
			
function checkPerfectNumber(val){
	if(val == 1){
		return false;
	}
	
	let sum = 1;// 正整数一定会有一个1,同时不用考虑自身,所以单独处理
	
	let sqt=Math.sqrt(val);
	for(let i=2;i

 

本次运行后的输出的结果为:[6, 28, 496, 8128];

 

Tips:完美数只有 6, 28, 496, 8128, 33550336 这几个

 

 

参考资料:

作者:guanpengchn
链接:https://leetcode-cn.com/problems/perfect-number/solution/hua-jie-suan-fa-507-wan-mei-shu-by-guanpengchn/

你可能感兴趣的:(JavaScript,算法)