Altiora Petamus

소수 본문

1day-1algorithm

소수

Haril Song 2021. 6. 7. 21:53
 

2581번: 소수

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.  단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

www.acmicpc.net

🤔생각해보기

소수를 찾는 것은 여러가지 방법이 있지만, 평소 애용하는 방법은 제곱근을 통해서 구하는 방법이다. math.sqrt() 의 효율성에 대해 여러 의견이 있긴하던데, 아직까지 느려서 실패한 적은 없는 것 같다.

로직은 다음과 같이 처리하면 된다.

  1. 소수인지 검사해서 배열 prime에 담는다.
  2. prime이 비어있다면, -1 을 출력하고
  3. 값이 있다면 합과 최소값을 각각 출력한다.

성공 코드

# 소수
# 기본수학 2

# 소수를 찾아서 리스트에 넣기
# 배열에서 최소값 min() 과 힙 sum() 을 출력한다.
# 단, 배열이 비었을 경우, -1 을 출력한다.
import math

m = int(input())
n = int(input())

prime = []

for num in range(m, n + 1):
    is_prime = True
    if num == 1:
        is_prime = False

    for i in range(2, int(math.sqrt(num)) + 1):
        if num % i == 0:
            is_prime = False
            break

    if is_prime:
        prime.append(num)

if not prime:  # len(prime) == 0 과 의미가 같다.
    print(-1)
else:
    print(sum(prime))
    print(min(prime))

'1day-1algorithm' 카테고리의 다른 글

DFS와 BFS  (0) 2021.06.11
binary gap  (0) 2021.06.10
소인수분해  (0) 2021.05.29
AC  (0) 2021.05.28
카드 2  (0) 2021.05.25