[Algorithm] 소수를 찾는 방법, 에라토스테네스의 체

2021. 1. 17. 02:35·Computer Science/Algorithm
728x90

 

에라토스테네스의 체 란?

소수(Prime number)를 찾는 알고리즘

대량의 소수를 빠르고 정확하게 구할 수 있는 방법

 

 

 

에라토스테네스의 체 원리

소수를 판별할 범위의 배열을 할당하고, 값을 지워나가는 방법

1. 배열을 생성하여 초기화

2. 2부터 시작하여, 특정 수의 배수를 모두 지운다. (자기 자신은 지우지 않는다)

3. 2부터 남아있는 모든 수는 소수이다.

 

 

 

에라토스테네스의 체 구현 (C++)

void Eratos(int n){

	/* 인덱스 0과 1은 사용하지 않음을 고려하여 배열을 할당해야 한다 */
	bool num[1000001];
    
	/* 배열 초기화 : 모두 소수라고 가정한 true 값을 준다 */
	for (int i = 2; i <= n; i++)
		num[i] = true;

	/* 소수 구하기 : n의 제곱근보다 작은 수만 검사해도 충분하다 */
	for (int i = 2; i * i <= n; i++)
	{
		if (num[i])
		{
			for (int j = i * i; j <= n; j += i)
				num[j] = false;
		}
	}
}

j 시작 값은 i * 2로 설정해도 되지만 i * k (k < i) 까지는 이미 검사되었으므로 i * i로 개선하였다.

 

 

 

에라토스테네스의 체 시간 복잡도

모든 수를 일일이 1과 자기자신으로만 나눠지는지 확인하는 알고리즘의 경우, 시간 복잡도가 O(N)이다.

모든 경우의 수를 다 돌면서 확인한다는 것이 몹시 비효율적이다.

사실 제곱근까지만 약수를 검증해도 되기 때문에 O(N^1/2)로 계산할 수 있다.

 

다만 이렇게 한 두개의 소수를 판별하는 것이 아닌 대량의 소수를 한꺼번에 판별하고자 하는 경우에

에라토스테네스의 체를 사용할 수 있다.

이 경우 시간 복잡도는 O(N log long N)이다.

 

 

728x90
저작자표시

'Computer Science > Algorithm' 카테고리의 다른 글

[Algorithm] 자료구조 - 연결 리스트 (Linked list)  (0) 2021.03.25
[Algorithm] 자료구조 - 배열(Array)  (0) 2021.03.25
[Algorithm] 자료구조(Data Structure) 란?  (0) 2021.03.25
[Algorithm] 빅오 표기법과 시간 복잡도의 개념 및 예제  (2) 2021.03.24
[Algorithm] 브루트 포스와 BFS, DFS  (0) 2020.11.26
'Computer Science/Algorithm' 카테고리의 다른 글
  • [Algorithm] 자료구조 - 배열(Array)
  • [Algorithm] 자료구조(Data Structure) 란?
  • [Algorithm] 빅오 표기법과 시간 복잡도의 개념 및 예제
  • [Algorithm] 브루트 포스와 BFS, DFS
s_ih_yun
s_ih_yun
  • s_ih_yun
    CODESYUN
    s_ih_yun
  • 전체
    오늘
    어제
    • 분류 전체보기 (326)
      • Computer Science (26)
        • Concept (3)
        • Algorithm (23)
      • Web (54)
        • Web (7)
        • Spring (14)
        • MyBatis (1)
        • AWS (7)
        • HTML & CSS (14)
        • JavaScript (11)
      • Programming (37)
        • C++ (3)
        • Java (6)
        • Python (10)
        • MySQL (1)
        • Oracle (2)
        • Git (15)
        • Dev Tools (0)
      • Infra˙ DevOps (1)
      • Baekjoon (104)
        • 단계별로 풀어보기 (78)
      • CodeUp (98)
        • Python 기초 100제 (98)
      • Programmers (2)
      • Books (3)
      • etc (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • Syun's Pages
  • 인기 글

  • 태그

    BOJ
    VS Code
    웹
    Python
    git
    spring
    SourceTree
    clean code
    oracle
    Cloud
    C
    Tistory
    myBatis
    c++
    알고리즘
    java
    Programmers
    aws
    HTML
    web
    CodeUp 기초 100제
    자료구조
    단계별로 풀어보기
    github
    db
    MySQL
    CSS
    JavaScript
    codeup
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
s_ih_yun
[Algorithm] 소수를 찾는 방법, 에라토스테네스의 체
상단으로

티스토리툴바