수학을 좀만 더 잘했다면 풀 수도 있었을텐데...🥲
const 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 = sum + i + num / i;
if (sum > num) {
return false;
}
}
}
return sum === num;
};
num === 1 이면 바로 false를 리턴
제외한 나머지 숫자들은 전부 1로 나눠지기 때문에 sum을 1부터 시작
2부터 num을 루트로 나눠서 정수로 만든 값까지만 구하면 됨
num을 i로 나누었을 때 나머지가 없다면 sum은 기존의 sum + i + num/i
반복문을 돌렸을 때 이미 sum이 num보다 커지는 경우는 false 리턴
반복문이 전부 돌아간 다음에 sum === num이라면 true 리턴