Uknow's Lab.
article thumbnail

https://www.acmicpc.net/problem/2581

 

2581번: 소수

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

www.acmicpc.net

 

난이도 : 실버 5
태그 : 수학, 정수론, 소수 판정

 

 

1. 설명

소수는 자기 자신과 1로만 나뉘는 수 입니다.

따라서 2 부터 자기 자신까지 나뉘눈 수가 있는지 판단하면 됩니다.

 

 

 

2. 소스코드

<python />
a = int(input()) b = int(input()) lst = list() for i in range(a, b+1): lst.append(i) for i in range(len(lst)): check = False n = 0 for j in range(2, lst[i]): if lst[i] % j == 0: lst[i] = 0 break; lst = [i for i in lst if i != 0 and i != 1] if len(lst) == 0: print(-1) else: print(sum(lst)) print(min(lst))

 

 

3. 코드분석

1. 입력값 세팅 및 lst(List)에 넣기

2. 리스트 모든 원소를 탐색하며, 2 이상부터 (자기 자신 - 1) 까지 나뉘는 수가 있는지 확인하고,

 나뉜다면 0으로 설정

3. 0 또는 1이 아닌 원소만 뽑기

4. 리스트의 크기가 0이라면 (소수가 없다면) -1 출력

5. 그렇지 않다면 총 합과 최솟값 출력

 

 

 

4. 후기

예전에 풀었던 파이썬 문제입니다.

지금보니... 왜 이렇게 풀었을까 싶은 부분도 있네요.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.