[코드테스트] 소수찾기

이강민·2021년 11월 27일
0

[코드테스트]Javascript

목록 보기
34/39
post-thumbnail

소수찾기

문제설명

1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요.
소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다.
(1은 소수가 아닙니다.)

제한사항

  • n은 2이상 1000000이하의 자연수입니다.

입출력 예

입출력 예 #1
1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환
입출력 예 #2
1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환

나의 풀이

23424

소수를 찾는 것은 에라토스테네스의 체의 공식을 이용하면 수월하게 풀 수 있다. 간단하게 설명하자면 에라토스테네스의 체의 공식은 먼저 0, 1을 제외한 2의 수부터 더 이상 정수로 나누어지지 않는 수를 말한다.
2의 배수인 수는 2로 나누어 짐으로 모두 제외 하고 3도 3의 배수를 제외, 5도 5의 배수를 제외한다.

에라토스테네스의 정리는 다음을 참고한다.

에라토스테네스의 체 알아보기

코드보기

function solution(n) {
//먼저 모든 수를 담는 배열을 만드는 데 모두 true로 저장한다.
   const arr = [];
    for(let i = 0; i <= n; i++){
        arr.push(true)
    }
//2부터 시작하여 해당 배수를 검사하며 
    for(let i = 2; i*i <= n; i++){
// 그 배수인 값이 배열에서 참일때
        if(arr[i]){
// 그 배수의 값들을 검사하여 false 값을 넣는다. 
            for(let j = i*i; j <= n; j+=i){
            arr[j] = false;
            }
        }
    }
//시작을 2부터하여 0,1을 제외 시켜야 하니 splice로 false를 넣는다.
    arr.splice(0,2,false, false);
//false 값을 제외한 나머지 true인 값 만 filter하여 배열로 true값의 배열을 만들고 
    const result  = arr.filter((value) => value === true)
//그 배열의 길이를 구하면 소수의 갯수를 구할 수 있다. 
    return result.length;
}
profile
AllTimeDevelop

0개의 댓글

관련 채용 정보