728x90
반응형

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

 

2581번: 소수

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

www.acmicpc.net

VERSION 2.0

import sys
import math

M = int(sys.stdin.readline())
N = int(sys.stdin.readline())

def is_prime(m):

    arr = [True] * (m+1)

    arr[0] = False
    arr[1] = False

    for i in range(2, int(math.sqrt(m))+1) :
        if arr[i] == True:
            p=2
            while i*p <= m: # 배수들 False 만들기
                arr[i*p]= False
                p+=1
    A = list(filter(lambda x : arr[x] == True  , range(len(arr))))
    return A
A = list(filter(lambda x: x>=M ,is_prime(N)))
if A:
    print(sum(A))
    print(min(A))
else:
    print(-1)

==> Lambda 통한 True 값들 인덱스 값 출력!!!! (제일 중요)!!!!!

VERSION 1.0

import sys
import math

M = int(sys.stdin.readline())
N = int(sys.stdin.readline())



gaet = 0
c=[]
sume = []
for p in range(M,N+1): #자연수 M부터 N까지 FOR문으로 돌린다.


    b = (math.trunc(math.sqrt(p)))
    if p in (2,3):
        c.append(p)
    else:
        for j in range(2,b+1):
            
            if p % j ==0: #나눠지는게 있으면 소수가 아니다.
                break
            else:
                if j==b: #나눠지는게 for문의 끝까지갔을때 없으면 소수이므로
                    c.append(p) #c리스트에 추가한다.
                else:
                    continue
if len(c)>=1: #c리스트에 소수가 없을수 있으므로 1개 이상이 있을경우 
    print(sum(c)) #c리스트내 전체값 더한값
    print(c[0]) #처음 c값을 출력한다.
else: #c리스트가 0개인 경우
    print(-1) #-1을 출력한다.

에라토스테네스의 체 사용하자.

728x90
반응형

+ Recent posts