[BOJ] 2581 소수

[BOJ] 2581 소수

문제 링크

또 한번의 소수 문제이다.

소수 문제는 소수가 아닌 것을 제외하는 편이 낫다는 것을 1978 문제에서 알게 되었다. 동일하게 풀이했고, 1은 소수가 아니라는 것을 빼놓아서 한 번 더 시도했다. 잊지 말아야지.

  • 리스트 간 차집합을 구하는 식을 작성해봤다. result = [x for x in range(M, N+1) if x not in array]

[전체 범위] - [소수가 아닌 수 리스트] 전체 범위 : range(M, M+1) 소수가 아닌 수 리스트 : array

for x in range(M, N+1):
  if (x not in array):
    result.append(x)

차집합은 위와 같이 구하면 된다! 표현방식은 나는 후자가 편한 것 같다.

나의 풀이

M = int(input())
N = int(input())

#소수란 1과 자기 자신 외에 다른 수로 나눴을 때 0이 되지 않는 수
#소수가 아닌 수 : 1과 자기 자신 외에 다른 수로 나눴을 때 0이 되는 수
array=[]
result=[]

for i in range(M, N+1): # M~N까지 순회 i = 60
  for j in range(1, i+1): # j = 1~60
    if i % j == 0 and j != i and j != 1 or i == 1:
      array.append(i)
      break

#range - array
result = [x for x in range(M, N+1) if x not in array]

if len(result) > 0:
  print(sum(result))
  print(result[0])
else:
  print(-1)

© 2021. All rights reserved.