ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬] 소수의 개수(에라토스테너스 체)
    자료구조_알고리즘/알고리즘 2020. 9. 7. 12:31

    에라토스테네스의 체란?

    소수를 판별하는 알고리즘이다.

    소수들을 대량으로 빠르고 정확하게 구하는 방법이다.

    단일 숫자 소수 여부 확인

     어떤 수의 소수의 여부를 확인 할 때는, 특정한 숫자의 제곱근 까지만 약수의 여부를 검증하면 O(N^1/2)의 시간 복잡도로 빠르게 구할 수 있다.

    수가 수(N이라고 가정)를 나누면 몫이 생기는데, 몫과 나누는 수 둘 중 하나는 N 제곱근 이하이기 때문이다.

    만약, 대량의 소수를 한꺼번에 판별해야할 경우는 '에라토스테네스의 체'를 이용한다.

    에라토스테네스의 체 원리

    에라토스테네스의 체는 가장 먼저 소수를 판별할 범위만큼 배열을 할당하여, 해당하는 값을 넣어주고, 이후에 하나씩 지워나가는 방법을 이용한다.

    1. 배열을 생성하여 초기화한다.
    2. 2부터 시작해서 특정 수의 배수에 해당하는 수를 모두 지운다.(지울 때 자기자신은 지우지 않고, 이미 지워진 수는 건너뛴다.)
    3. 2부터 시작하여 남아있는 수를 모두 출력한다.

    파이썬 로직 : 

     

    ''' 1. 판별하고 싶은 수 입력  '''
    n = int(input()) 
    ''' 2. 해당 수 만큼 배열 생성  '''
    ch = [0] * (n+1) 
    cnt =0 
    
    ''' 3. 해당 수 만큼 반복문을 돌면서 소수 cnt 개수 추가
           안쪽 for 문에서 숫자의 배수를 지워나감.
    '''
    for i in range(2, n+1): 
        if ch[i] == 0: 
            cnt +=1 
            for j in range(i, n+1 , i): 
                ch[j] =1 
    
    print(cnt) 

     

    reference : velog.io/@max9106/Algorithm-%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98-%EC%B2%B4

    '자료구조_알고리즘 > 알고리즘' 카테고리의 다른 글

    [파이썬] 자릿수의 합  (0) 2020.09.07
Designed by Tistory.