practivceAlgorithm/백준

[백준][Python] 4134 다음 소수

findTheValue 2021. 9. 3. 10:03

체를 m까지만 돌려주고 그 m까지의 소수만을 가지고 n의 소수 판별을 하면 된다.

소수정리에따라 n다음의 소수는 n+ln(n)이전에 나와야 하니 n+ln(n)까지만 검사를 해주면 된다.

 

import sys
input = sys.stdin.readline
from math import log2


def make_ast_sieve():
    MAX = int(4e9)
    m = int(MAX**0.5)+1
    sieve = [False,False] + [True] * m
    for i in range(2,m):
        if sieve[i]:
            for j in range(i+i,m,i):
                sieve[j] = False
    return [num for num in range(2,m) if sieve[num]]


def prime_check(num):
    
    for prime in prime_nums:
        if not num%prime and num//prime > 1:
            return False
        if prime > num:
            return True
    return True


prime_nums = make_ast_sieve()

for test_case in range(int(input())):
    n = int(input())
    MAX = int(4e9)
    if n==0 or n==1:
        print(2)
        continue
    for i in range(n,MAX+int(log2(MAX))):
        if prime_check(i):
            print(i)
            break