• toc {:toc}

문제

M 이상 N μ΄ν•˜μ˜ μ†Œμˆ˜λ₯Ό λͺ¨λ‘ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 μžμ—°μˆ˜ M κ³Ό N 이 빈 칸을 사이에 두고 μ£Όμ–΄μ§„λ‹€. (1 ≀ M ≀ N ≀ 1,000,000)Β M 이상 N μ΄ν•˜μ˜ μ†Œμˆ˜κ°€ ν•˜λ‚˜ 이상 μžˆλŠ” μž…λ ₯만 μ£Όμ–΄μ§„λ‹€.

좜λ ₯

ν•œ 쀄에 ν•˜λ‚˜μ”©, μ¦κ°€ν•˜λŠ” μˆœμ„œλŒ€λ‘œ μ†Œμˆ˜λ₯Ό 좜λ ₯ν•œλ‹€.

좜처:https://www.acmicpc.net/problem/1929

μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체

  1. 배열을 μƒμ„±ν•œλ‹€. (+ λ°°μ—΄ μ΄ˆκΈ°ν™” μ½”λ“œμ—μ„œλŠ” false 둜 μ΄ˆκΈ°ν™”)
  2. 0 κ³Ό 1 은 μ†Œμˆ˜κ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ œμ™Έ
  3. 2 λŠ” μ†Œμˆ˜μ΄κ³  이후 2 의 λ°°μˆ˜λŠ” μ†Œμˆ˜κ°€ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ œμ™Έ
  4. 이와 같이 μ†Œμˆ˜λ₯Ό μ•½μˆ˜λ‘œ κ°€μ§€κ³  μžˆλŠ” μˆ˜λ“€μ„ μ œμ™Έ
  5. μ†Œμˆ˜λ₯Ό μ„ μ •ν•˜λŠ” λ²”μœ„λŠ” N 의 제곱근으둜 ν•œμ •
#include <iostream>
 
using namespace std;
 
int main() 
{
  	bool arr[1000001];
  	int M, N;
 
  	cin >> M >> N;
 
  	arr[0] = arr[1] = true;
 
  	for (int i=2; i*i<=N; i++)
  	{
    	if (!arr[i])
    	{
	      	for (int j = i * 2; j <= N; j += i)
    	    	arr[j] = true;
    	}
  	}
 
  	for (int i = M; i <= N; i++)
  	{
    	if (!arr[i])
     	 	cout << i << '\n';
  	}
	return 0;
}