- 백준 4134번 풀이2024년 03월 13일
- Lv. 34 라이츄
- 작성자
- 2024.03.13.:56
문제
https://www.acmicpc.net/problem/4134
주어진 숫자보다 같거나 큰 소수를 출력하시오. (예: 6->7)
풀이
이 문제를 풀기 위해서는 필요한 게 하나 있다.
def isprime(a): sqrt = int(a ** 0.5) if a == 1: return False for i in range(2,sqrt+1): if a % i == 0: return False else: return True
바로 에라토스테네스의 체를 예전에 백준 푼다고 루트 N 버전으로 코딩한게 그것. 근데 저거 저대로 쓰면 틀리고요… 내 경험담임 님들은 한방에 맞추십셔…
def isprime(a): sqrt = int(a ** 0.5) if a < 2: return False for i in range(2,sqrt+1): if a % i == 0: return False else: return True
아무튼 0이랑 1은 애초에 소수고 나바리고 못 매기니까 걍 예외처리 합시다.
K = int(sys.stdin.readline()) for i in range(K): T = int(sys.stdin.readline()) while isprime(T) == False: T += 1 print(T)
우리 늘 그래왔듯이… 입력은 쉽다. 로직이 문제지… 근데 문제를 보면 주어진 수보다 '같거나 큰' 소수를 출력하라고 되어 있다. 그래서 체 갖고왔잖아요? 그리고 같거나 큰 소수를 찾기 위해 저 체를 쓸 거다. 같거나 큰 소수가 나올때까지 뺑뺑이를 돌려야 하니 반복문으로 While이 온 거고. 여기까지 이해 되셨죠?
isprime()에 소수를 넣었을때는 True, 합성수를 넣었을때는 False가 나온다. 그럼 왜 While문에 저런 조건이 붙었는지도 이해할 수 있다. False 떴으면 합성수니까 1을 더해서 소수 나올때까지 반복문 뺑뺑이 돌라는 얘기. 쉽죠?
import sys def isprime(a): sqrt = int(a ** 0.5) if a < 2: return False for i in range(2,sqrt+1): if a % i == 0: return False else: return True K = int(sys.stdin.readline()) for i in range(K): T = int(sys.stdin.readline()) while isprime(T) == False: T += 1 print(T)
그래서 이거 내고 맞았다.
'BOJ > [BOJ] Python' 카테고리의 다른 글
백준 17103번 풀이 (0) 2024.04.13 백준 2485번 풀이 (0) 2024.02.26 백준 1735번 풀이 (0) 2024.02.25 백준 13241번 풀이 (0) 2024.02.10 백준 11478번 풀이 (0) 2023.12.10 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)