새소식

Computer Science/외우면 좋은 로직

1. 소수 판별 알고리즘, 2. N까지 수에서 소수들 뽑기(에라토스테네스의 체) 외우기

  • -

 

미리 알아가자. 

 

1. 소수 판별 알고리즘 

특정 N이 소수인지 아닌지 판별 

 

특정 수가 소수인지 아닌지 알아 보려면 

for문을 써야한다! 

# 소수 판별 함수
ef is_prime_number(n):
    end = int(n**(1/2))
    for i in range(2, end+1):
        if n % i == 0:
            return False
    
    return True

print(is_prime_number(4)) # 4는 소수가 아님
print(is_prime_number(7)) # 7은 소수임

 

약수의 성질을 생각했을 때 약수(제곱근)까지만 확인하면 된다. 

 

  • 모든 약수가 가운데 약수를 기준으로 곱셈 연산에 대해 대칭을 이루는 것을 알 수 있다
    • 예를 들어 16의 약수는 1, 2, 4, 8, 16이다
    • 이때 2 X 8 = 16은 8 X 2 = 16과 대칭이다
  • 따라서 우리는 특정한 자연수의 모든 약수를 찾을 때 가운데 약수(제곱근)까지만 확인하면 된다

 

2. N까지 수에서 소수들 뽑기(에라토스테네스의 체)

def get_primes(N):
    array = [True for _ in range(N+1)] # 처음엔 모든 수가 소수(True)인 것으로 초기화

    # 에라토스테네스의 체 알고리즘 
    end = int(N**(1/2))
    for i in range(2, end+1): # 2부터 n의 제곱근까지의 모든 수를 확인하며
        if array[i] == True:  # i가 소수인 경우 (남은 수인 경우)
            j = 2             # i를 제외한 i의 모든 배수를 지우기
            while i*j <= N:		# 배수들 제거
                array[i*j] = False
                j += 1

    return [i for i in range(2, N+1) if array[i]]

primes_list = get_primes(100)
print(primes_list)

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.