1~number까지 for문으로 순회하면서,
소수 개수를 구해주는 문제입니다.
소수 개수가 limit 이상이면 power로 대체하여 더해줍니다.
아래는 소수를 구할때 1 ~ (number / 2)를 기준으로 구해준 경우 입니다. 1~number까지 for문으로 순회하면서,
소수 개수를 구해주는 문제입니다.
소수 개수가 limit 이상이면 power로 대체하여 더해줍니다.
효율을 좋게하려면 sqrt를 사용해야 합니다.
A 곱하기 B의 경우, A만 구해도 B를 구할 수 있습니다.
예를들어 16인 경우 소수는 1, 2, 4, 8, 16 입니다.
1 * 16 = 16
2 * 8 = 16
4 * 4 = 16
마지막 4 * 4 인 경우 숫자는 4 하나 뿐이므로 예외가 됩니다
이때만 if 문으로 아래처럼 예외 처리를 해주면 됩니다.
if (i ** 2 === value) cnt++;
else cnt += 2;
function solution(number, limit, power) {
const check = (value) => {
let cnt = 0;
if (value === 1) return 1;
for (let i = 1; i <= Math.sqrt(value); i++) {
if (value % i === 0) {
if (i ** 2 === value) cnt++;
else cnt += 2;
}
}
return cnt;
};
let answer = 0;
for (let i = 1; i <= number; i++) {
const res = check(i);
answer += res > limit ? power : res;
}
return answer;
}