박오이님
무미건조한 개발자
박오이님
전체 방문자
오늘
어제
  • 뭥미 (101)
    • 프로젝트 (8)
      • 자가 보호 (3)
      • 주식 시장 분석 도구 (5)
    • 보안 (7)
      • 개론 (2)
      • 웹 (2)
      • 시스템 (2)
    • 개발 (69)
      • C++ (12)
      • Win32 (7)
      • MFC (2)
      • 자료구조 (8)
      • 알고리즘 (22)
      • 백준 (9)
      • 프로그래머스 (4)
      • LeetCode (0)
      • 개발자 면접 준비 (4)
      • OpenGL (1)
    • 서적 (13)
      • Effective C++ (9)
      • Effective Modern C++ (4)
    • 관심사 (4)
      • 재테크 (4)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • std
  • 윈도우
  • 코딩컨벤션
  • 나동빈
  • 동빈나
  • CPP
  • Functional
  • EffectiveC++
  • C++
  • 시스템프로그래밍
  • 플로이드와샬알고리즘 #최단경로 #백준 #알고리즘 #개발 #C #C++
  • 윈도우프로그래밍
  • C
  • 에라토스테네스의 체 #알고리즘 #개발 #C #C++ #소수 #소수판별
  • 윈도우시스템프로그래밍
  • vcpkg
  • 합집합찾기
  • JSON
  • 프로세스메모리
  • 개발
  • 윈도우개발자
  • 크루스칼알고리즘
  • 알고리즘
  • 나동빈 #알고리즘 #동빈나
  • DFS #BFS #알고리즘 #프로그래밍 #코딩테스트 #코딩 #C++ #C
  • 최소간선비용
  • 안경잡이개발자
  • 백준 #알고리즘 #플로이드와샬 #DFS #BFS #C #C++
  • jsoncpp
  • 에라토스테네스의 체 #C #C++ #개발 #알고리즘 #BFS #DFS #백준 #백준알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
박오이님

무미건조한 개발자

개발/알고리즘

에라토스테네스의 체

2019. 9. 1. 20:26

에라토스테네스의 체는 대표적인 소수(prime) 판별 알고리즘이다.

--> 지금까지 for문 돌려서 약수 있으면 break 하는식으로 했다.

--> 더군다나 이 알고리즘은 중학교 수학에서 배울 수 있다고한다..

 

먼저 언급했던 for문을 돌려 1과 본인을 제외한 약수가 있다면, break 하는 방법은 시간 복잡도 O(N)을 가지고 있다.

에라토스테네스의 체를 사용하면, O(N^(1/2))의 시간복잡도를 가진다고 한다.

 

에라토스테네스의 체의 중점은 특정한 숫자의 제곱근까지의 약수의 여부를 검증하는 방식이다.

 

에라토스테네스의 체를 구현하는 방법은,

 

1. 이차원 배열을 생성하여 값을 초기화.

 

2. 2부터 시작해서 특정 숫자의 배수에 해당하는 숫자들을 모두 지움.

--> 지운다는 의미는 해당 배열의 값을 0으로 바꿔줌.

 

3. 3의배수, 4의배수, 5의 배수 .... 과정을 반복하여 지워줌.

 

4. 남아있는 숫자들을 출력.

 

코드는 이러하다.

 

// SieveofEratosthenes

#include <stdio.h>

int number = 100000;
int a[100001];

void SieveofEratosthenes()
{
	for (int i = 2; i <= number; i++)
	{
		a[i] = i;
	}

	for (int i = 2; i <= number; i++)
	{
		if (a[i] == 0) continue;
		for (int j = i + i; j <= number; j += i)
		{
			a[j] = 0;
		}
	}

	for (int i = 2; i <= number; i++)
	{
		if (a[i] != 0)
		{
			printf("%d ", a[i]);
		}
	}
}

int main(void)
{
	SieveofEratosthenes();
}

 

 

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

최소 스패닝 트리 (Minimum Spanning Tree, MST)  (0) 2019.10.08
플로이드 와샬(Floyd Warshall) 알고리즘  (0) 2019.09.01
다이나믹 프로그래밍(Dynamic Programming)  (0) 2019.07.04
크루스칼 알고리즘 (Kruskal Algorithm)  (0) 2019.07.03
Union-Find(합집합 찾기)  (0) 2019.07.03
    '개발/알고리즘' 카테고리의 다른 글
    • 최소 스패닝 트리 (Minimum Spanning Tree, MST)
    • 플로이드 와샬(Floyd Warshall) 알고리즘
    • 다이나믹 프로그래밍(Dynamic Programming)
    • 크루스칼 알고리즘 (Kruskal Algorithm)
    박오이님
    박오이님
    긍정도 아니고 부정도 아닌 0

    티스토리툴바