본문 바로가기

PS/백준 문제

백준 2581번 파이썬 문제풀이

import math 
m = int(input()) 
n = int(input()) 
array = [True for i in range(n+1)] #1~n까지 소수 
array[1] = False 
lists = [] #정답을 담을 리스트 
for i in range(2,int(math.sqrt(n))+1): 
  if array[i] == True:
    j = 2 
    while i*j <= n: 
      array[i*j] = False 
      j+=1 
      
for i in range(m,n+1): 
  if array[i] == True: 
    lists.append(i) 
    
if len(lists) != 0:
  print(sum(lists)) 
  print(lists[0])
else: print(-1)

에라토네스 체를 써서 문제를 풀었다.
array[1] = False를 하지 않으면 반례 입력값 1 1 때문에 에러가 뜨므로 반드시 해줘야 한다

참고

 

소수 알고리즘

소수(prime number)란 2보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어 떨어지지 않는 자연수이다. 코딩테스트에서 숫자가 소수인지 판별하는 경우가 간혹 생기므로 정리해본다.

dongcoding.tistory.com

 

반응형