반응형
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1174&sca=99&sfl=wr_hit&stx=1901
#include <stdio.h>
int N;
int M[110];
bool bPrime[1000010];
void Input() {
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d", M + i);
}
bool IsPrime(int n) {
if (bPrime[n]) return true;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
bPrime[n] = true;
return true;
}
int GetUpperPrime(int n) {
if (n > 1000000) return 0;
else if (IsPrime(n)) return n;
else return GetUpperPrime(n + 1);
}
int GetLowerPrime(int n) {
if (n <= 0) return 0;
else if (IsPrime(n)) return n;
else return GetLowerPrime(n - 1);
}
int main(void) {
Input();
for (int i = 0; i < N; i++) {
if (IsPrime(M[i])) {
printf("%d\n", M[i]);
continue;
}
int HighPrime = GetUpperPrime(M[i]+1);
int HighGap = HighPrime - M[i];
int LowPrime = GetLowerPrime(M[i]-1);
int LowGap = M[i] - LowPrime;
if (HighPrime == 0 || LowGap < HighGap) {
printf("%d\n", LowPrime);
}
else if (LowPrime == 0 || HighGap < LowGap) {
printf("%d\n", HighPrime);
}
else {
printf("%d %d\n", LowPrime, HighPrime);
}
}
return 0;
}
반응형
'프로그래밍 알고리즘' 카테고리의 다른 글
[정올 1972] 정렬(SORT) (1) | 2023.01.07 |
---|---|
[정올 1912] 미로 탐색 (0) | 2023.01.06 |
[정올 1885] 접두사 (1) | 2023.01.06 |
[정올 1840] 치즈 (0) | 2023.01.06 |
[정올 1836] 연속부분합 찾기 (0) | 2023.01.06 |