https://programmers.co.kr/learn/courses/30/lessons/77884
두 수의 사이의 숫자들(두 수 포함)의 약수의 개수를 각각 구하고 조건에 맞게 덧셈과 뺄셈을 해준다.
public int solution(int left, int right) {
int answer = 0;
for (int i = left; i <= right; i++) {
int divisor = divisor(i);
if (divisor % 2 == 0) {
answer += i;
} else {
answer -= i;
}
}
return answer;
}
// 약수 구하는 함수
private int divisor(int N) {
/**
* N의 약수 중 하나가 m이라고 했을 때 다른 약수는 N/m이다.
* 따라서 루트 N까지 구하면 약수 절반의 개수를 알 수 있다.
* 절반의 개수를 구하고 거기에 2를 곱해주자.
* 루트 N이 i와 같으면 제곱근 이므로 1개로 카운트 하자.
* 제곱근: 제곱해서 나온 값이 N과 같은 경우
*/
int count = 0;
for (int i = 1; i * i <= N; i++) {
if (i * i == N) count++;
else if (N % i == 0) count += 2;
}
return count;
}