HJ56 完全数计算
题目描述
示例
代码
js
/*
完全数 是 出去自身以外的约数,相加之后等于本身
比如 28
约数有 1 2 4 7 14 28
1+2+4+7+14=28
1. 所以,写一个函数 判断是否为完全数,如果是,就记下来 count++
(其实 就这几个 6/28/496/8128)
*/
let readline = require('readline')
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.on('line', line=>{
// num的范围 1≤n≤5×10^5
let num = parseInt(line)
let resultArr = [] // 存放完全数
for(let i = 1; i< num; i++){
let flag = isPerfect(i)
if(flag){
resultArr.push(i) // 如果是完全数,就把结果保存下来
}
}
console.log(resultArr.length)
})
function isPerfect(num){
let left = 1 // 左边界
let right = Math.floor(num/2) //右边界
let isPerfect = false // 默认不是完全数
if(left < right){ //求约数的时候,算一半就行
//开始判断
let sum = 0
for( ; left <= right; left++){
if(num % left===0){
sum+=left
}
}
if(sum === num){
isPerfect = true
}
}
return isPerfect
}