6월 26일(월) - 약수, 배수와 소수 2 (4134번)
4134번: 다음 소수
정수 n(0 ≤ n ≤ 4*109)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오.
www.acmicpc.net
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
최초 생각 정리
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
문제점
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include <math.h>
int main(void)
{
long long test_case;
scanf("%d", &test_case);
long long number;
for (int i = 0; i < test_case; i++)
{
scanf("%lld", &number);
long long result;
while (1)
{
for (int j = 2; j <= sqrt((double)number) + 1; j++)
{
if (number % j == 0)
{
break;
}
if (j == sqrt((double)number))
{
result = number;
}
}
number++;
}
printf("%lld", result);
}
return 0;
}
1. 위의 풀이를 제출하게되면, 시간초과가 발생
-> 문제해결 불가
2. 230731 풀이 추가
-> test_case마다 입력되는 number가 0, 1, 2인 경우에는 바로 가장 작은 소수로 2를 출력한다
-> 그 이외의 경우에는 이전 풀이에서의 방향성을 유지해서 풀이
-> 다만, while(1)문 안에서 변수 result가 0으로 그대로 넘어오는 경우, 즉 number % j가 0이 되지 못하는 경우
그 당시의 number를 printf 하고, break하며 빠져나오는 것으로 수정
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀이
(230731 풀이 추가)
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include <math.h>
int main(void)
{
int test_case;
scanf("%d", &test_case);
for (int i = 0; i < test_case; i++)
{
long long number;
scanf("%lld", &number);
if (number == 0 || number == 1 || number == 2)
{
printf("%d\n", 2);
continue;
}
while (1)
{
int result = 0;
for (long long j = 2; j <= sqrt((double)number) + 1; j++)
{
if (number % j == 0)
{
result++;
break;
}
}
if (result == 0)
{
printf("%lld\n", number);
break;
}
number++;
}
}
return 0;
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'백준(C언어) > 23년 6월' 카테고리의 다른 글
[C] 백준 - 4779번: 칸토어 집합 (0) | 2023.06.28 |
---|---|
[C] 백준 - 7785번: 회사에 있는 사람 (0) | 2023.06.27 |
[C] 백준 - 10988번: 펠린드롬인지 확인하기 (0) | 2023.06.09 |
[C] 백준 - 2444번: 별 찍기 - 7 (0) | 2023.06.08 |
[C] 백준 - 7562번: 나이트의 이동 (0) | 2023.06.07 |
댓글