https://www.acmicpc.net/problem/4948
4948번: 베르트랑 공준
베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼
www.acmicpc.net


풀이
#include<iostream>
#include<cmath>
#include <vector>
using namespace std;
int nums[250000];
bool find(int num)
{
for (int j = 2; j <= sqrt(num); j++)
{
if (nums[num] == 0)
return true;
else if ((num) % j == 0) //소수가 아님
{
nums[num] = 0;
return true;
}
}
return false; //소수임
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
for (int i = 0; i < 250001; i++)
nums[i] = i;
int n;
vector<int> ns;
while(true)
{
cin >> n;
if (n == 0)
break;
ns.push_back(n);
}
for (int j = 0; j < ns.size(); j++)
{
int result = 0;
for (int i = ns[j] + 1; i <= 2 * ns[j]; i++)
{
if (i == 2)
result++;
else if (!find(i))
if (i <= 2 * ns[j])
result++;
}
cout << result << "\n";
}
return 0;
}
'에라토스테네스의 체' 를 활용하여 풀어야 시간초과가 나지 않는다
에라토스테네스의 체는 시간복잡도 O(n ^1/2) 를 가지며 n 까지의 소수를 구하고자 할 때 2부터 n의 제곱근까지 돌아가며 모든 배수들은 제외시켜 소수만 남기는 알고리즘이다
해당 코드는 배수를 제외시키지는 않았다n까지의 수를 모두 배열로 만든 뒤, 소수가 아님이 판별난 숫자는 0으로 치환했다그리고 0으로 치환된 숫자는 더이상 소수인지 아닌지 계산할 필요가 없으므로 시간이 절약된다
'> 코딩테스트' 카테고리의 다른 글
| [백준] 2156 포도주 시식 (C++) (0) | 2023.08.09 |
|---|---|
| [백준] 26069 붙임성 좋은 총총이 (C++) (0) | 2023.07.03 |
| [백준] 1929 소수 구하기 (C++) (0) | 2023.06.22 |
| [백준] 4134 다음 소수 (C++) (0) | 2023.06.22 |
| [백준] 1735 분수 합 (C++) (0) | 2023.06.20 |