mang_dev
맹꽁거리는 개발자
mang_dev
전체 방문자
오늘
어제
  • 분류 전체보기 (185)
    • Frontend (2)
      • Next.js (1)
    • Backend (3)
      • GraphQL (2)
    • Book (1)
      • 기타 (1)
    • Old (177)
      • 알고리즘 퍼즐 (1)
      • 백준 (131)
      • 프로그래머스 (0)
      • Codility (15)
      • LeetCode (7)
      • Codewars (1)
      • Codeforces (0)
      • Django (6)
      • React (2)
      • Naver Map Api (3)
      • Web UI (4)
      • Introduction to Cloud (2)
hELLO · Designed By 정상우.
mang_dev

맹꽁거리는 개발자

백준 1929번 소수 구하기 // C++
Old/백준

백준 1929번 소수 구하기 // C++

2020. 2. 23. 23:47

문제

 

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000)

출력

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

 


 

풀이

 

에라토스테네스의 체를 활용하는 문제이다.

 

에라토스테네스의 체란, 2부터 시작해서 해당 소수의 모든 배수를 제외하고 제외되지 않은 다음 수로 넘어가서 같은 동작을 반복하다보면 소수만 남게 된다!

 

그렇게 소수만 남기면서 한 뒤, 원하는 범위 내의 소수를 출력하면 된다.

 

주의할 점은 1은 소수가 아니다!


 

코드

더보기
#include <iostream>

using namespace std;

int N, M;

bool num[1000001];

int nextSosu(int cur);

int main() {
	cin >> N >> M;

	int cur = 1;

	num[1] = true;

	while (true) {
		cur = nextSosu(cur);

		if (cur == -1)
			break;

		for (int i = 2;; i++) {
			if (i * cur > M)
				break;

			num[i * cur] = true;
		}
	}

	for (int i = N; i <= M; i++) {
		if (!num[i])
			printf("%d\n", i);
	}
}

int nextSosu(int cur) {
	for (int i = cur + 1; i <= M; i++) {
		if (!num[i])
			return i;
	}

	return -1;
}

 

저작자표시 (새창열림)

'Old > 백준' 카테고리의 다른 글

백준 2512번 예산 // C++  (0) 2020.02.23
백준 10815번 숫자 카드 // C++  (0) 2020.02.23
백준 2805번 나무 자르기 // C++  (0) 2020.02.23
백준 1874번 스택 수열 // C++  (0) 2020.02.23
백준 1654번 랜선 자르기 // C++  (0) 2020.02.23
    'Old/백준' 카테고리의 다른 글
    • 백준 2512번 예산 // C++
    • 백준 10815번 숫자 카드 // C++
    • 백준 2805번 나무 자르기 // C++
    • 백준 1874번 스택 수열 // C++
    mang_dev
    mang_dev

    티스토리툴바