For Programmer

백준 3896번 파이썬 문제풀이(소수 사이 수열) 본문

코팅테스트/백준 문제 모음

백준 3896번 파이썬 문제풀이(소수 사이 수열)

유지광이 2022. 2. 17. 22:13
728x90


이 문제는 에라토스테네스의 체만 구현할 수 있으면 쉽게 해결할 수 있는 문제이다.

T = int(input())
# 에라토스테네스의 체 구하기
sosu = [True] * (1299709 + 1)
sosu[0], sosu[1] = False, False
for i in range(1, 1299709 + 1):
    if not sosu[i]:
        continue
    for j in range(i * i, 1299709 + 1, i):
        sosu[j] = False

for _ in range(T):

    N = int(input())
    # 만약 소수 라면 0 출력
    if sosu[N]:
        print(0)
    else:  # 소수가 아니라면
        i = N  # 왼쪽으로 이동할 인덱스
        j = N  # 오른쪽으로 이동할 인덱스
        count = 1  # 개수를 저장할 인덱스(현재 개수 1개 저장)
        while True:  # 왼쪽이동 하면서 소수만나면 정지
            i -= 1
            if sosu[i]:
                break
            count += 1  # 지나면서 개수를 1개씩 추가해준다.
        while True:  # 오른쪽으로 이동하면서 소수 만나면 정지
            j += 1
            if sosu[j]:
                break
            count += 1  # 지나면서 개수를 1개씩 추가해준다.
        print(count + 1)

 

728x90
Comments