본문 바로가기
백준알고리즘/기본 수학1

(Python/🥈4)백준알고리즘4134번: 다음 소수

by windy7271 2023. 8. 1.
728x90
반응형

 

문제 바로가기 

https://www.acmicpc.net/problem/4134
다음소수

문제:

정수 n(0 ≤ n ≤ 4*109)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오.

입력:

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다.

 

출력:

각각의 테스트 케이스에 대해서 n보다 크거나 같은 소수 중 가장 작은 소수를 한 줄에 하나씩 출력한다.

 

틀린풀이1.

import sys
sys.stdin = open('/Users/song/Desktop/Python/Python/h.txt', 'r')

N = int(input())
lst = [int(input()) for i in range(N)]

arr = [False] * 2 + [True] * 4000000000
for i in range(2,int(4000000001**0.5)):
    for j in range(i,4000000001,i):
        if arr[j] == True:
            arr[j] = False

for i in range(N):
    x = int(input())
    while True:
        if arr[x] == False:
            x += 1
        else:
            print(x)
            break


이렇게 에라토스 체 를 사용하면 메모리 초과가 난다.

 

풀이1:

 

N = int(input())

def check(x):
    for i in range(2,int(x**0.5)+1):
        if x % i == 0:
            return False
    return True

for i in range(N):
    n = int(input())
    while True:
        if n == 0 or n == 1:
            print(2)
            break
        if check(n):
            print(n)
            break
        else:
            n += 1

 

숫자가 들어올때 그 숫자의 제곱근 숫자 보다 작은 숫자로 안 나누어 떨어지면 소수이다

예를들면 20 일때를 해보면 제곱근은 4다 1~4 를 다 체크한다

20은 2에서 나누어떨어지고

21은 3

22는 2

23은 1,2,3,4 로 다 나누어도 안 나누어 떨어진다. 

 

그러면 True 반환 후 출력 그리고 다음 케이스로 이동

 

반응형

댓글