본문 바로가기

알고리즘 문제풀이

백준 1816 암호키 Python 수학 브루트포스 브론즈1

정답 코드

소인수분해를 하지않고 

소인수들이 10의 6승 이하가 되면 안된다는 조건에 중심으로 두는 코드

n = int(input())
for tc in range(n):
    s = int(input())
    for i in range(2,10**6 +1):
        if s%i ==0:
            print('NO')
            break
        elif i == 10**6:
            print('YES')

시간초과되는 코드

def find(arr):
    for i in range(len(arr)):
        if arr[i] < 10**6:
            return 'NO'
    return 'YES'
n = int(input())
for tc in range(n):
    s = int(input())
    prime_list = []
    i = 2
    while i <= s**(1/2):
        if s % i != 0:
            i += 1
            continue
        # if s%i ==0 and s//i >= 10**6:
        while s % i == 0 and s!=0:
            s //= i
        prime_list.append(i)
        i += 1

    # print(prime_list)
    print(find(prime_list))