JS-약수의 갯수와 덧셈

산기슭곰발자·2023년 12월 4일

다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
수 약수 약수의 개수
13: 1, 13 = 2
14: 1, 2, 7, 14 = 4
15: 1, 3, 5, 15 = 4
16: 1, 2, 4, 8, 16 = 5
17: 1, 17 = 2
따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

수포자다.
부끄러운 말이지만 약수가 뭔지부터 검색해봤다.

약수, 約數
어떤 수나 식을 나누어 나머지가 없이 떨어지는 수나 식을 일컫는 말.
"3은 6의 ∼이다. ↔배수"

상기 기재해놓은 예시를 보면 13의 약수(나눴을때 나머지가 없는 수)는 1과 13이다. 홀수를 깔끔하게 나누려면 자기자신과, 1을 나누면 된다.

function (left, right) 에 주어진 매개변수중 left 부터 right까지의 수의 약수를 구하여 약수가 짝수이면 더하고 약수의 갯수가 홀수인 수는 빼라는 식이다.

풀이과정

1. 약수를 구하는 알고리즘을 보자, 홀수는 자기자신과 1을 나누어 정수인 수가 약수. 즉 약수는 짝수개가된다.
2. 즉 어떤 숫자의 제곱근이 딱 떨어진다면, ex 4 = 1, 2, 4  자기자신을 포함한 약수의 갯수는 홀수개가 된다.
3. 이 공식을 활용해서 코드를 짜보자.

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

if( Number.isInteger(Math.sqrt(i)) 를 보면, 배열이 돌아가는 i라는 수의 제곱근이 isInteger(정수) 일경우 즉 if(i의 제곱근이 정수이라면) 약수는 홀수개 이니 빼고 그렇지 않으면 더해라.

인터넷에서 검색해보았던 약수 구하는 알고리즘이라고 한다. 수포자로써 알고리즘이 어려워지기 시작했다.

profile
곰처럼 개발해보자.

0개의 댓글