문제
M부터 N까지 소수의 합과 최솟값을 구하시오
풀이
import sys
M = int(sys.stdin.readline())
N = int(sys.stdin.readline())
a = list(range(M,N+1))
print(M,N,a)
사실 이렇게 배열 만들어서 하려고 했더니 일부 합성수가 안 지워졌다.
import sys
M = int(sys.stdin.readline())
N = int(sys.stdin.readline())
P = []
def isprime(a):
if a < 2:
return False
for i in range(2,a):
if a % i == 0:
return False
else:
return True
for i in range(M,N+1):
if isprime(i):
P.append(i)
print(sum(P))
print(min(P))
그래서 이게 최선임.. 아니 일단 내지 말아봐… 일단 답이 없을 때 -1을 출력하려면, 어떻게 나오는지를 봐야 한다.
[]
0
Traceback (most recent call last):
File "/home/koreanraichu/Untitled-1.py", line 18, in <module>
print(min(P))
ValueError: min() arg is an empty sequence
답이 없을 때는 리스트가 없고, 합도 없을뿐더러 빈 리스트라서 최솟값 찾아달라고 하면 오류난다.
import sys
M = int(sys.stdin.readline())
N = int(sys.stdin.readline())
P = []
def isprime(a):
if a < 2:
return False
for i in range(2,a):
if a % i == 0:
return False
else:
return True
for i in range(M,N+1):
if isprime(i):
P.append(i)
if len(P) <= 0:
print(-1)
else:
print(sum(P))
print(min(P))
그래서 거기에 대한 처리를 추가해야 한다. 빈 리스트는 길이가 0이니까, 리스트 길이가 0이면 -1이 나오게 했다.
Reply