๐Ÿ•๏ธ ICPC Sinchon/Basic Math

[BOJ][C++] ๋ฐฑ์ค€ 4948๋ฒˆ: ๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€

์„ ๋‹ฌ 2023. 11. 16. 02:45
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/4948

 

4948๋ฒˆ: ๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€

๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€์€ ์ž„์˜์˜ ์ž์—ฐ์ˆ˜ n์— ๋Œ€ํ•˜์—ฌ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์กด์žฌํ•œ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค. ์ด ๋ช…์ œ๋Š” ์กฐ์ œํ”„ ๋ฒ ๋ฅดํŠธ๋ž‘์ด 1845๋…„์— ์ถ”์ธกํ–ˆ๊ณ , ํŒŒํ”„๋ˆ„ํ‹ฐ ์ฒด๋น„์‡ผ

www.acmicpc.net

 

๋ฌธ์ œ

๋ฒ ๋ฅดํŠธ๋ž‘ ๊ณต์ค€์€ ์ž„์˜์˜ ์ž์—ฐ์ˆ˜ n์— ๋Œ€ํ•˜์—ฌ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” ์ ์–ด๋„ ํ•˜๋‚˜ ์กด์žฌํ•œ๋‹ค๋Š” ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.

์ด ๋ช…์ œ๋Š” ์กฐ์ œํ”„ ๋ฒ ๋ฅดํŠธ๋ž‘์ด 1845๋…„์— ์ถ”์ธกํ–ˆ๊ณ , ํŒŒํ”„๋ˆ„ํ‹ฐ ์ฒด๋น„์‡ผํ”„๊ฐ€ 1850๋…„์— ์ฆ๋ช…ํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 10๋ณด๋‹ค ํฌ๊ณ , 20๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” 4๊ฐœ๊ฐ€ ์žˆ๋‹ค. (11, 13, 17, 19) ๋˜, 14๋ณด๋‹ค ํฌ๊ณ , 28๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜๋Š” 3๊ฐœ๊ฐ€ ์žˆ๋‹ค. (17,19, 23)

์ž์—ฐ์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 

์ž…๋ ฅ

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์ผ€์ด์Šค๋Š” n์„ ํฌํ•จํ•˜๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰์—๋Š” 0์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ, n๋ณด๋‹ค ํฌ๊ณ , 2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ œํ•œ

  • 1 ≤ n ≤ 123,456

ํ’€์ด

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์ˆ˜์—ฌ๋ถ€๋ฅผ ๊ตฌํ•˜๊ณ 

์ž…๋ ฅ๋ฐ›์€ ๊ฐ’๋งˆ๋‹ค ํ•ด๋‹นํ•˜๋Š” ๋ฒ”์œ„์˜ ์†Œ์ˆ˜์˜ ๊ฐฏ์ˆ˜๋ฅผ ์นด์šดํŠธํ–ˆ๋‹ค.

 

10% ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค๊ฐ€ ๋œฌ๋‹ค๋ฉด

n์ด ์†Œ์ˆ˜์ธ ๊ฒฝ์šฐ๋„ ์ž˜ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•˜์ž

n ๋ณด๋‹ค ํฌ๊ณ  2n๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ด๋ผ๋Š” ๋ฒ”์œ„๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

n< <=2n ์ด์—ฌ์•ผํ•œ๋‹ค.

 

// ํ’€์ด : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>

using namespace std;

const int INF = 247000;

int main() {
    vector<bool> isPrime(INF, true);
    isPrime[0] = isPrime[1] = false;
    for(int i=2; i*i<INF; i++) {
        if(!isPrime[i])
            continue;
        for(int j=i*i; j<INF; j+=i) {
            isPrime[j] = false;
        }
    }
    
    int n;
    cin >> n;
    while(n!=0) {
        int cnt = 0;
        for(int i=n+1; i<=n*2; i++) {
            if(isPrime[i])
                cnt++;
        }
        cout << cnt << "\n";
        cin >> n;
    }
}
๋ฐ˜์‘ํ˜•