코딩하는 해달이

[알고리즘] 에라토스테네스의 체 본문

개인 공부/알고리즘&자료구조

[알고리즘] 에라토스테네스의 체

코딩하는 해달 2022. 7. 26. 18:16

알고리즘

  • 초기 sieve 배열의 모든 값은 0으로 초기화되어 있습니다.
  • 2부터 차례대로 정수를 살펴 봅니다.
  • 2가 소수입니다. 따라서, 2의 배수들은 sieve[x] = 1로 전부 표시해 놓습니다.
    • 이럴 경우 sieve[4] = sieve[6] = sieve[8] = … = 1이 됩니다.
  • 이제 다음 숫자를 살펴봅니다. (sieve[x] == 1인 x는 살펴보지 않고 반복문상에서 건너뛸 수 있습니다.)
  • 3은 sieve[3] = 0 이었습니다. 따라서 소수이며, 3의 배수들은 전부 1로 표시해 놓습니다.
  • 4를 봅니다. 4는 이미 sieve[4] = 1이므로 건너뜁니다.
  • 5를 봅니다. sieve[5] = 0 이므로 소수이며, 5의 배수들은 전부 1로 표시해 놓습니다.

C++ 코드

#include <iostream>
#include <cmath>

int main() {
	int arr[1000000] = { 0, };

	for (int i = 2; i <= n; i++) {
		arr[i] = i;
	}
    
	for (int i = 2; i <= sqrt(n); i++) {
		if (arr[i] == 0) continue;
		for (int j = i + i; j <= n; j += i) {
			arr[j] = 0;
		}
	}

 }
반응형
Comments