record logo record

에라토스테네스의 체 란?

에라토스테네스의 체의 특징

에라토스테네스의 체의 알고리즘 예시

일반적인 소수 판별 코드

#include <stdio.h>

bool PrimeNumber(int x){
	for(int i = 2; i < x; i++){
		if(x % i == 0) return false;
	}
	return true;
}
int main(void){
	printf("%d",PrimeNumber(97));
	return 0;
}

제곱근을 이용한 소수 판별 코드

#include <stdio.h>
#include <math.h>

bool isPrimeNumber(int x) {
	// 제곱근을 확인하는 함수 
	int end = (int) sqrt(x);
	for(int i = 2; i <= end; i++){
		if( x % i == 0) return false;
	}
	return true;
}

int main(void){
	printf("%d",isPrimeNumber(17));
	return 0;
}

에라토스테네스의 체 C 구현

#include <stdio.h>
#include <math.h>

int num = 100000;
int a[100001];

void PrimeNumberSieve() {
	// 제곱근을 확인하는 함수 
	// 초기화 
	for(int i = 2; i <= num; i++){
		a[i] = i;
	} 
	
	for(int i = 2; i <= num; i++){
		if(a[i] == 0) continue;
		for(int j = i + i; j <= num; j += i ){
			a[j] = 0;
		}
	}
	for(int i = 2; i <= num; i++){
		if(a[i]!=0) printf("%d ", a[i]);
	}
}

int main(void){
	PrimeNumberSieve();
	return 0;
}

관련된 Post

References