www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net

#include <iostream>

using namespace std;

int n, m;
int che[1000001] = {1, 1};

int main(void)
{
  ios_base::sync_with_stdio(0);
  cout.tie(0);
  cin >> n >> m;
  // 에라토스테네스의 체
  for(int i = 2 ; i < 1000001 ; i++)
  {
    if(che[i] == 1)
    {
      continue;
    }
    int idx = 2;
    while(i * idx <= 1000000)
    {
      che[i * idx++] = 1;
    }
  }

  for(int i = n ; i <= m ; i++)
  {
    if(!che[i]) cout << i << '\n';
  }
}

 

[Try]

1. 에라토스테네스의 체 사용했더니 너무 쉽게 풀었다.. 왜 실버2인거지??

 

[Point]

1. 백만개를 다 돌 필요 없이 최대 입력값 m 까지만 돌아도 됐을 것 같다.

2. 완전탐색 방식으로 전부 돌려도 성공이 뜨는 것 같다. 2초에 거의 근접하게 뜬다.

 

[More]

'PS > BOJ' 카테고리의 다른 글

[백준] 4948.cpp : 베르트랑 공준  (0) 2020.05.26
[백준] 11723.cpp : 집합  (0) 2020.05.26
[백준] 18111.cpp : 마인크래프트  (0) 2020.05.23
[백준] 2805.cpp : 나무 자르기  (0) 2020.05.21
[백준] 1966.cpp : 프린터 큐  (0) 2020.05.20

+ Recent posts