def is_prime(num):
if(num <= 1):
return False
i = 2
while i * i <=num:
if(num % i == 0):
return False
i += 1
return True
Case = int(input())
num_list = [int(input()) for x in range(Case)]
prime_list = []
for i in range(2, 10001):
if(is_prime(i)):
prime_list.append(i)
for num in num_list:
half = num // 2
d_half = half
u_half = half
while(d_half > 0):
if(d_half in prime_list and u_half in prime_list):
if(num == d_half + u_half):
print(d_half, u_half)
break
d_half -= 1
u_half += 1
밑의 코드는 시간초과.. 절반으로 제한하는 것보다 절반부터 시작하는게 당연히 빠를 것 같긴 하다
def is_prime(num):
if(num <= 1):
return False
i = 2
while i * i <=num:
if(num % i == 0):
return False
i += 1
return True
Case = int(input())
num_list = [int(input()) for x in range(Case)]
prime_list = []
for i in range(2, 10000):
if(is_prime(i)):
prime_list.append(i)
for num in num_list:
diff = None
prime_a, prime_b = 0, 0
for i in prime_list:
if(i > num // 2):
break
for j in prime_list:
if(i + j == num or j > num):
i_minus_j = abs(i - j)
if(diff == None):
diff = i_minus_j
prime_a, prime_b = i, j
elif(diff > i_minus_j):
diff = i_minus_j
prime_a, prime_b = i, j
break
print(prime_a, prime_b)
'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글
백준 1874번(python) (0) | 2019.06.02 |
---|---|
백준 10828번(python) (0) | 2019.06.02 |
백준 4948번(python) (0) | 2019.05.31 |
백준 2581번(python) (0) | 2019.05.31 |
백준 1929번(python) (0) | 2019.05.31 |