function solution(left, right) {
var answer = 0;
for(let i=left;i<=right;i++) {
let count = 2; // 1과 자신은 무조건 약수
if(i===1) count = 1;
for(let j=2;j<=Math.sqrt(i);j++) {
if(i%j == 0)
{
if(j== Math.sqrt(i))
count+=1;
else count+=2;
}
}
if(count % 2 == 0) answer+=i;
else answer-=i;
}
return answer;
}
약수를 구할 때 For문을 다 도는 게 아닌 제곱 수가 아닐 때 약수는 두 수의 곱이라는 성질을 이용해 풀었다. 예를들어 16이면 2 * 8 이런식으로 나온다는 뜻! 그래서 루트를 씌운 값까지 for문을 돌면서 개수를 세려주었다. 가장 인기가 많은 답을 보니 제곱근이 정수면 약수의 개수가 홀수, 아니면 짝수라는 것을 생각했던데 대단한 거 같다...!