본문 바로가기
성장하기/Python

소수찾기와 에라토스테네스의 체

by 솔로 슈퍼스타 2023. 6. 15.
728x90

Python에서 소수를 찾는 방법은 다양한 방법으로 구현할 수 있습니다. 여기서는 가장 일반적이고 간단한 방법 두 가지를 소개하겠습니다.

소수 판별 함수: 주어진 숫자가 소수인지 판별하는 함수를 작성합니다. 소수는 1과 자기 자신만을 약수로 가지는 수입니다.

 

def is_prime(n):
    if n < 2:  # 0과 1은 소수가 아님
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:  # 약수가 존재하면 소수가 아님
            return False
    return True

위의 함수는 주어진 숫자 n이 소수인지를 판별합니다. 2부터 n의 제곱근까지의 숫자로 나누어 떨어지는지 확인하여 소수인지를 결정합니다.

에라토스테네스의 체(Seive of Eratosthenes)는 소수를 찾는 알고리즘 중 하나입니다. 이 알고리즘은 특정 범위 내의 모든 소수를 효율적으로 찾아내는 방법입니다.

알고리즘의 동작은 다음과 같습니다:

  • 2부터 시작하여 첫 번째 소수로 판단합니다.
  • 해당 소수의 배수를 모두 지웁니다. (소수의 배수는 소수가 아닌 수로 판단됩니다)
  • 다음으로 판단되는 수를 소수로 간주하고, 해당 소수의 배수를 지웁니다.
  • 위의 과정을 반복하여 모든 수에 대해 소수 여부를 판단합니다.

이 알고리즘은 모든 비소수를 제거하여 소수만 남기는 효율적인 방법이기 때문에, 대량의 소수를 찾거나 범위 내의 소수를 반복적으로 찾아야 할 때 유용합니다.

예를 들어, 2부터 100까지의 범위에서 소수를 찾는 경우, 에라토스테네스의 체를 사용하면 다음과 같은 순서로 소수를 찾을 수 있습니다:

  • 2는 소수입니다. 2의 배수를 모두 제거합니다.
  • 다음으로 판단되는 수인 3은 소수입니다. 3의 배수를 모두 제거합니다.
  • 다음으로 판단되는 수인 5는 소수입니다. 5의 배수를 모두 제거합니다.
  • 위의 과정을 반복하여 100까지의 수에 대해 소수를 찾습니다.

이렇게 에라토스테네스의 체를 사용하면 특정 범위 내의 모든 소수를 효율적으로 찾을 수 있습니다.

def sieve_of_eratosthenes(n):
    primes = [True] * (n+1)
    primes[0] = primes[1] = False  # 0과 1은 소수가 아님
    for i in range(2, int(n**0.5) + 1):
        if primes[i]:
            for j in range(i*i, n+1, i):
                primes[j] = False
    return [i for i in range(n+1) if primes[i]]

위의 함수는 주어진 범위 내의 모든 소수를 구합니다. 에라토스테네스의 체 알고리즘을 사용하여 소수를 찾아내고, 해당하는 인덱스 값을 소수로 가지는 리스트를 반환합니다.

이러한 방법들을 활용하여 파이썬에서 소수를 찾을 수 있습니다. 선택하는 방법은 입력 범위와 성능 요구사항에 따라 달라질 수 있습니다.

 

[참조]

https://chat.openai.com/

https://ko.wikipedia.org/wiki/%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

'성장하기 > Python' 카테고리의 다른 글

set  (0) 2023.06.15
permutations 과 combinations  (0) 2023.06.15
cycle  (0) 2023.06.15
cmp_to_key  (0) 2023.06.14
PriorityQueue  (0) 2023.06.14