(파이썬) 소수 목록을 만들려고 하는데

조회수 436회
prime = [1,2,3,5,7]
factors = []

for i in range(11,10000000,2):
    for j in range(2,i,2):
        if i % j ==0:
            factors.append(j)
            if factors == []:
                prime.append(i)
                print(i)
            else:
                break
        else:
            continue

프라임 배열에 소수들을 오름차순으로 넣으려고 하는데 실행은 되는데 print(i)가 안 나오는데 어느 부분이 문제일까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • for j in range(2,i,2): -> 짝수로 올라가면서 나머지연산을 하는것이 문제가 된것같네요. 애초에 i는 짝수를 배제하고 홀수로만 이루어져 있는데 j는 짝수로만 이루어져 있으니깐 나머지연산에 0이 들어갈일이 없죠 ohsangyun 2020.8.6 17:11

1 답변

  • prime = [1,2,3,5,7]
    factors = []
    
    for i in range(11,100):
        for j in range(2,i):
            if i % j == 0:
                factors.append(j)
                break
    
        if factors == []:
            print(i)
            prime.append(i)
        else:
            factors = []
    
    print(prime)
    

    소수 계산하는법이 1과 자기자신 제외하고 완벽히 나눠지지 않는 숫자라서.. 작성자님은 나머지 값이 0 이 나오면 factors 에다가 값을 넣고 그게 빈공간인지 아닌지로 판단해서 소수를 판단하는 코드를 짜고 싶으신거 같으신데

    그걸 확인하는건 j loop이 완료되고 나서 하시는게 맞다고 생각합니다.(아마 이 부분에서 질문이 있으신거 같구요) 그리고 factors 는 잠시.. 임시저장소 같은거니깐 연산이후에는 비워줘야지 조건문에서 문제없을거 같구요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)