알고리즘/BOJ

백준 1978번 소수 찾기

꾸준함. 2018. 4. 3. 00:01

문제 링크입니다: https://www.acmicpc.net/problem/1978

에라토스테네스의 체(http://jaimemin.tistory.com/445)를 이용하여 풀었습니다.


#include <iostream>

#include <cmath>

using namespace std;

 

const int MAX = 100;

 

int minFactor[1001]; //minFactor[i] -> i의 가장 작은 소인수(i가 소수인 경우 자기 자신)

 

//에라토스테네스의 체

void eratosthenes(void)

{

        //1은 항상 예외

        minFactor[0] = minFactor[1] = -1;

        //모든 숫자를 처음에는 소수로 표시

        for (int i = 2; i <= 1001; i++) //수가 최대 1000이므로

               minFactor[i] = i;

        //에라토스테네스의 체 수행

        int sqrtN = int(sqrt(1001)); //루트 N

        for (int i = 2; i <= sqrtN; i++)

               if (minFactor[i] == i)

                       for (int j = i * i; j <= 1001; j += i)

                              //아직 약수를 본적 없는 숫자인 경우 i를 써둔다

                              if (minFactor[j] == j)

                                      minFactor[j] = i;

}

 

int main(void)

{

        int N;

        cin >> N;

       

        int cnt = 0;

        eratosthenes();

        //N개의 숫자

        for (int i = 0; i < N; i++)

        {

               int num;

               cin >> num;

               if (minFactor[num] == num) //소수이면 추가

                       cnt++;

        }

        cout << cnt << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 13701번 중복 제거  (0) 2018.04.08
백준 2629번 양팔저울  (3) 2018.04.08
백준 2839번 설탕 배달  (0) 2018.03.31
백준 1110번 더하기 사이클  (0) 2018.03.31
백준 2352번 반도체 설계  (0) 2018.03.29