티스토리 뷰

목차


    반응형

    소수 구하기


     

    시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
    2 초 256 MB 165144 46579 32760 26.757%

    문제

    M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

    입력

    첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

    출력

    한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

    예제 입력 1 복사

    3 16
    

    예제 출력 1 복사

    3
    5
    7
    11
    13
    
     

    let input = require('fs').readFileSync('/dev/stdin').toString().split(' ');
    
    
    let N =Number(input[0]);
    let M =Number(input[1]);
    
    let isTrue = Array(M + 1).fill(true);
    // [true, true, true, true,
    //   true, true, true, true,
    //   true, true, true, true,
    //   true, true, true, true,
    
    isTrue[0] = isTrue[1] =false;
    //   true]  0과 1은 소수가 아니므로 false값으로 바꿔준다.
    // [
    //     false, false, true, true,
    //     true,  true,  true, true,
    //     true,  true,  true, true,
    //     true,  true,  true, true,
    //     true
    //   ]
    
    
        //2부터 시작, 주어진 값 N의 제곱근까지 i의 배수들을 모두 false로 만들어준다.
        for(let i =2; i<=Math.ceil(Math.sqrt(M));i++){
            if(isTrue[i]){
                let m =2;
                while(i * m <= M){
                    isTrue[i*m]=false;
                    m++;
                }
            }
    }
    
    const answer=[]
    for(let n =N; n<= M; n++){
        if(isTrue[n]){
            answer.push(n)
        }
    }
    console.log(answer.join('\n'))
    728x90
    반응형