문제 : https://www.acmicpc.net/problem/3896
[알고리즘풀이]
에라토스테네스 체를 이용해서, Input 범위의 모든 값들에 대해서 소수인지 아닌지 판단할 수 있게 준비한다.
N이 들어오면, N이 소수가 아니라면 왼쪽으로 소수가 나올 때까지 순회하고, 오른쪽으로 소수가 나올때까지 순회해
가장 가까이에 있는 왼쪽 소수와 오른쪽 소수를 찾아 그 사이의 Gap을 출력한다.
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
bool p[1300000];
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
for (int i = 2; i < 1300000; i++) {
if (p[i] == false) {
for (int j = 2 * i; j < 1300000; j+= i)
p[j] = true;
}
}
int t;
cin >> t;
for (int i = 0; i < t; i++) {
int n;
cin >> n;
int L = n, R = n;
while (p[L] == true)
L--;
while (p[R] == true)
R++;
cout << R - L << '\n';
}
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 16486 - 운동장 한 바퀴 (0) | 2019.09.29 |
---|---|
[BOJ] 16673 - 고려대학교에는 공식 와인이 있다 (0) | 2019.09.29 |
[BOJ] 3474 - Factorial (0) | 2019.09.29 |
[BOJ] 2153 - 소수단어 (0) | 2019.09.29 |
[BOJ] 11659 - 구간 합 구하기 4 (0) | 2019.09.27 |