프로그램

[파이썬] 문제 : 정해진 범위 소수 찾기(Sieve of Erastosthenes알고리즘)

오디세이99 2022. 12. 29. 20:13
728x90
반응형

lst = [a for a in range(2, 101)]  #  [2,3,4,5,6..100] 리스트 만들기

for i in range(2, 100):            # 2,3,4,5...99까지 나옴
    for j in range(len(lst)):
        if i > 2 and i%2 == 0:    # 2는 배수처리하고 2 이상 짝수는 모두 2의 배수여서 계산하지 않음. 속도 향상
            continue              # 하단 코드  실행하지 않고 반복문으로 다시 실행
        if i != lst[j] and lst[j]%i == 0:    # i = 5, lst[j] = 5 는 계산하지 않음. lst[j] % i == 0 하면 i의 배수인지 확인
            lst[j] = 0             # 0을 삭제할 값으로 설정. 여기사 del을 사용하면 range(len(lst))다 달라져 에러 발생

for i in range(len(lst)-1, 0, -1):  # 뒤에서부터 삭제. 앞아서부터 하면 인덱스가 달려져 에러 발생
    if lst[i] == 0:                  # 0 값을 삭제할 항목
        del lst[i]                   # 리스트에서 해당 인덱스 항목 삭제

for s in lst:
    print(s,end=' ')

728x90
반응형