#문제

#작성 코드

#include <iostream>
#include <stdio.h>

bool primeArr[1000001];
// 1~1000000인덱스값 1이면 소수이다.
// 1,000,000정도의 수는 크기때문에
// 에라토스테네스의 체를 이용해보도록 하자. 

void prime(int m, int n){
	//primeArr의 값을 모두 1으로 초기화한다.
	std::fill_n(primeArr, 1000001, 1);
	// 1이 소수가 아님을 표시한다.
	primeArr[1] = 0;
	// 2부터 n의 제곱근까지 반복하며 에라토스테네스의 체 알고리즘 수행
	for(int q=2; q*q<=n; q++){
		if(primeArr[q] == 0){
			continue;
		}
		for(int k=q+q; k<=n; k+=q){
			primeArr[k]=0;
		}
	}	
}

int main()
{
	int M, N;
	std::cin>>M>>N;
	
	prime(M, N);
	
	//M과 N사이의 소수(primeArr[] == 1 ) 출력 
	for(int i=M; i<=N; i++){
		if(primeArr[i]==1){
			printf("%d\n", i);
		}
	} 
	return 0;
}

##

* std::fill_n(초기화 할 배열명, 초기화할 개수, 초기화값);

'BOJ' 카테고리의 다른 글

BOJ 9020번 :: 골드바흐의 추측  (0) 2019.11.19
BOJ 4948번 :: Chebyshev's Theorem(베르트랑 공준)  (0) 2019.11.19
BOJ 2581번 :: 소수  (0) 2019.11.18
BOJ 1978번 :: 소수 찾기  (0) 2019.11.17
BOJ 2775번 :: 부녀회장이 될테야  (0) 2019.11.17

+ Recent posts