반응형
문제
정수 n(0 ≤ n ≤ 4*10**9)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오.
문제풀이
import sys
input = sys.stdin.readline
#01
def sosu(x):
if x==0 or x==1:
return False
for i in range(2,int(x**0.5)+1):
if x%i==0:
return False
return True
#02
for i in range(int(input())):
x=int(input().rstrip())
while True:
if(sosu(x)):
print(x)
break
x+=1
- 소수를 구하는 것이기에 에라토스테네스의 체를 사용할 수도 있지만,
문제의 입력 범위가 4*10**9 즉 엄청 큰 수이다. 그렇기에 시간 초과로 문제를 풀 수 없다.
- #01 : 소수를 판독하는 함수이다. 소수이면 True, 소수가 아니면 False를 반환한다.
- #02 : for문을 통해 x를 입력받고 while문을 통해 x가 소수이면 바로 출력하고 멈춘다.
만약 소수가 아니라면 x를 1더해서 x보다 같거나 큰 것 중에 가장 가까운
소수를 찾아 출력하고 while문을 종료한고 for문을 반복한다.
'프로그래밍 > 백준' 카테고리의 다른 글
[알고리즘] 백준 1788 파이썬 - 피보나치 수의 확장 (2) | 2022.12.06 |
---|---|
[알고리즘] 백준 9421 파이썬 - 소수상근수 (0) | 2022.12.05 |
[알고리즘] 백준 2824 파이썬 - 최대공약수 (0) | 2022.12.03 |
[알고리즘] 백준 3896 파이썬 - 소수 사이 수열 (0) | 2022.12.02 |
[알고리즘] 백준 1747 파이썬 - 소수&팰린드롬 (1) | 2022.12.01 |