Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 100~150 사이의 임의의 소수 5개를 시리즈로 생성하는 프로그램 만들기

이 글에서는 파이썬과 판다스(pandas)를 활용하여 100부터 150 사이에 존재하는 소수 중 임의로 5개를 추출하고, 이를 시리즈(Series) 객체로 생성하는 방법을 알아봅니다.

해결 접근 방식

이 문제는 다음과 같은 단계로 해결할 수 있습니다.

  • 소수를 저장할 빈 리스트를 정의합니다.

  • for 반복문을 생성하고 범위를 100부터 150 미만까지 설정합니다.

  • 중첩된 for 반복문을 사용하여 2부터 해당 값 미만까지 차례대로 나누어 보고, 나누어 떨어지는 수(약수)가 있는지 검사합니다. 약수가 발견되면 break로 내부 반복문을 종료하고, 끝까지 발견되지 않으면 else 블록이 실행되어 그 값을 리스트에 추가합니다.

  • random 모듈의 sample() 함수로 리스트에서 5개의 값을 무작위로 추출한 뒤, 이를 판다스 시리즈로 변환합니다.

핵심 코드

for i in range(100, 150):
    for j in range(2, i):
        if(i % j == 0):
            break
    else:
        l.append(i)

여기서 주목할 부분은 파이썬 고유의 for-else 구문입니다. break 없이 반복문이 끝까지 정상적으로 실행되었을 때만 else 블록이 실행됩니다. 즉, 어떤 수로도 나누어 떨어지지 않는다면(약수가 없다면) 그 수는 소수이므로 리스트에 추가되는 방식입니다.

data = rand.sample(l, 5)
rand_series = pd.Series(data)

sample() 함수는 리스트에서 중복 없이 지정한 개수만큼의 요소를 무작위로 추출합니다. 따라서 매번 실행할 때마다 서로 다른 소수 조합이 선택됩니다.

전체 예제 코드

아래의 전체 구현 예제를 통해 더 자세히 이해해 보겠습니다.

import pandas as pd
import random as rand

l = []
for i in range(100, 150):
    for j in range(2, i):
        if(i % j == 0):
            break
    else:
        l.append(i)

data = rand.sample(l, 5)
rand_series = pd.Series(data)
print(rand_series)

실행 결과

무작위 추출이므로 실행할 때마다 출력은 달라지며, 한 번의 실행 결과는 다음과 같습니다.

0    109
1    149
2    107
3    101
4    131
dtype: int64

추가 팁: 성능 최적화

현재 코드는 각 수를 2부터 i-1까지 모두 검사하지만, 실제로는 √i까지만 검사해도 소수 여부를 판별할 수 있습니다. 내부 반복문을 range(2, int(i**0.5) + 1)로 변경하면 연산 횟수를 크게 줄여 더 효율적인 코드가 됩니다. 또한 100~150 범위의 실제 소수 목록은 101, 103, 107, 109, 113, 127, 131, 137, 139, 149로 총 10개이므로, 이 중 5개가 무작위로 선택된다는 점을 참고하면 좋습니다.