๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

[๋ฐฑ์ค€/C++] 1929๋ฒˆ : ์†Œ์ˆ˜ ๊ตฌํ•˜๊ธฐ(์‹œ๊ฐ„ ์ดˆ๊ณผ, ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด)

by nitronium102 2021. 8. 7.

๋ฌธ์ œ

M์ด์ƒ N์ดํ•˜์˜ ์†Œ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ M๊ณผ N์ด ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. (1 ≤ M ≤ N ≤ 1,000,000) M์ด์ƒ N์ดํ•˜์˜ ์†Œ์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ๋Š” ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ, ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์†Œ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

ํ’€์ด

์ด์ „ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋˜ ๋ฐฉ์‹๋Œ€๋กœ ํ–ˆ์œผ๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ ์„ค๋ช…์—๋„ ๋‚˜์™€์žˆ๋“ฏ, ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

 

01. ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด 0๊ณผ 1์„ ์ œ์™ธํ•œ ์ˆ˜๋ฅผ true๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

02. root(max)๊นŒ์ง€ ๋Œ๋ฉด์„œ ์†Œ์ˆ˜์˜ n๋ฐฐ์ˆ˜, ์ฆ‰ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ false๋กœ ํ‘œ์‹œํ•œ๋‹ค

03. ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋งŒํผ for๋ฌธ์„ ๋Œ๋ฉด์„œ ์†Œ์ˆ˜์ธ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

๋ฌธ์ œ๊ฐ€ ์ž˜ ํ’€๋ฆฌ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์•„๋ž˜ ํŒ์„ ์ฐธ๊ณ ํ•˜๋ฉด ์‰ฝ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋„์›€๋˜์—ˆ๋˜ ๊ฒƒ์€ 5๋ฒˆ๊ณผ 6๋ฒˆ์ด์—ˆ๋‹ค.

https://www.acmicpc.net/board/view/39203

05. endl์€ ๋ฒ„ํผ๋ฅผ flushํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋Š๋ฆฌ๋‹ค. '\n'์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค
(endl ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š”๋ฐ. \n์„ ์‚ฌ์šฉํ•˜๋‹ˆ ๋ฐ”๋กœ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค!)
+ cout ๋Œ€์‹  printf๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋œ๋‹ค๋Š” ๊ธ€๋„ ์žˆ์—ˆ๋‹ค. 

06. ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ํ”ํžˆ ์•ˆ์ชฝ ๋ฃจํ”„๋ฅผ int j = i * i๋กœ ์‹œ์ž‘ํ•˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด i๊ฐ€ 46341์ด ๋˜๋Š” ์ˆœ๊ฐ„๋ถ€ํ„ฐ i * i๊ฐ€ int์˜ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. long long์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, i * i ๋Œ€์‹  i * 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
#include <iostream>
#include <cmath>
using namespace std;

int main(){
  int min, max;
  cin >> min >> max;
  bool isPrime[max+1];
  fill_n(isPrime, max+1, true);

  isPrime[0] = false;
  isPrime[1] = false;

  for (int i=2; i<=sqrt(max); i++){
 	// ์†Œ์ˆ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ˆ˜๋“ค
    if (isPrime[i] == true){
   	// ๊ธฐ์กด ์ˆ˜์˜ n๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค
      // ex) i = 2์ด๋ฉด 2*2, 2*3, 2*4, ...๋ฅผ false๋กœ ํ‘œ์‹œ
      for (int j = i*2; j<=max; j+=i)
        isPrime[j] = false;
    }
  }

  for (int i=min; i<=max; i++){
    if (isPrime[i])
      cout << i << "\n";
  }
}

์†Œ์ˆ˜ ๋ฌธ์ œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์–ด์„œ ์ ์  ์ต์ˆ™ํ•ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ํ’€ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ์•Œ๊ฒŒ ๋˜์–ด์„œ ์‹ ๊ธฐํ•˜๋‹ค!!

๋Œ“๊ธ€