728x90

주어진 두수 사이의 수 중 약수의 개수가 짝수이면 더하고 홀수이면 빼서 결과값 반환 

 

public int solution(int left, int right) {

int answer = 0;

for (int i = left; i <= right; i++) {

if(primeNum(i)%2==0) {

answer+=i;

}else {

answer-=i;

}

}

return answer;

}

 

public int primeNum(int num) {

int count=0;

for (int i = 1; i*i <= num; i++) {

if(i*i==num)count++;

else if(num%i==0)count+=2;

}

return count;

}

단순하게 약수의 개수를 구해서 계산했다. 

 

그런데 약수를 구하는 primeNum을 보면 

i*i==num 

즉 제곱수인 경우는 1만 더하고 아니면 전부 2를 더해서 짝수이다. 

 

즉 제곱수만 빼고 나머지는 다 더하면 된다. 

 

public int solution2(int left, int right) {

int answer = 0;

for (int i = left; i <= right; i++) {

if(i%Math.sqrt(i)==0) {

answer-=i;

}else {

answer+=i;

}

}

return answer;

}

+ Recent posts