알고리즘

소수 나열하기

na_o 2021. 8. 18. 02:31
728x90

[소수 나열하기]

정수를 입력 했을 때, 그 정수 이하의 소수를 모두 반환하시오.

소수는 자신보다 작은 두 개의 자연수를 곱하여 만들 수 없는 1보다 큰 자연수이다.

# 20이 입력된다면, 아래와 같이 반환해야 합니다!
[2, 3, 5, 7, 11, 13, 17, 19]

 

 

소수는 자기 자신과 1 외에는 나누어 떨어지지 않음 이걸 증명하면 됨
-> 자기 자신과 1 이외의 숫자로 나누어 떨어지면 소수가 아니다

input = 20

def find_prime_list_under_number(number):
    prime_array = []
    for num in range(2, number + 1):
        for i in range(2, num):
            if num % i == 0:
                break
        else:
            prime_array.append(num)

    return prime_array


result = find_prime_list_under_number(input)
print(result)

 

여기서 더 개선할 수 있는 부분이 있음!

 

 

 

모든 숫자를 일일이 나누지 말고 2 ~ num-1까지의 소수로만 나누자

-> prime_array에 2 ~ num-1 소수만 담겨있음

input = 20

def find_prime_list_under_number(number):
    prime_array = []
    for num in range(2, number + 1):
        for i in prime_array:  # for i in range(2, num): #2~num-1 -> 2~num-1이하의 소수
            if num % i == 0:
                break
        else:
            prime_array.append(num)

    return prime_array


result = find_prime_list_under_number(input)
print(result)

 

여기서 더 개선할 수 있는 부분이 있음!

 

 

 

N이 N의 제곱근보다 크지 않은 어떤 소수로도 나눠지지 않는다
-> 수가 수를 나누면 몫이 발생하는데, 몫과 나누는 수 둘 중 하나는 반드시 N의 제곱근 이하이다

input = 20

def find_prime_list_under_number(number):
    prime_array = []
    for num in range(2, number + 1):
        for i in prime_array:
            if num % i == 0 and i * i <= num:  #몫과 나누는 수 둘 중 하나 N의 제곱근 이하
                break
        else:
            prime_array.append(num)

    return prime_array


result = find_prime_list_under_number(input)
print(result)

'알고리즘' 카테고리의 다른 글

Array와 Linked List  (0) 2021.08.19
문자열 뒤집기  (0) 2021.08.18
알고리즘 더 풀어보기 (2)  (0) 2021.08.17
알고리즘 더 풀어보기 (1)  (0) 2021.08.17
점근 표기법  (0) 2021.08.15