πŸ•οΈ 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;
    }
}
λ°˜μ‘ν˜•