반응형
Chapter 02. 기초수학 문제풀이
약수와 소수 (Python 기초 실습)
정리
이번 강의에서는 약수(divisor), 소수(prime number), 소인수(prime factor) 의 개념을 정리하고,
이를 활용한 간단한 프로그램을 만드는 방법을 배웠다.
1. 약수의 개념
- 어떤 수를 나누어떨어지게 하는 수를 약수라고 한다.
- 예를 들어 12의 약수는 1, 2, 3, 4, 6, 12 이다.
- Python에서는 if n % i == 0: 조건으로 i가 n의 약수인지 확인할 수 있다.
2. 소수의 개념
- 약수가 1과 자기 자신뿐인 수를 소수라고 한다.
- 즉, 1을 제외하고 나누어지는 수가 없으면 소수이다.
- 일반적으로 2부터 n-1까지 반복문을 돌며 나누어떨어지는 수가 있는지 확인한다.
- 효율을 높이려면 n의 제곱근까지만 검사해도 충분하다.
3. 소인수의 개념
- 어떤 수의 약수 중 소수인 수를 소인수라고 한다.
- 예를 들어 12의 소인수는 2와 3이다.
- 이를 이용하면 소인수분해(prime factorization) 도 가능하다.
4. 실습 과제 요약
- 100부터 1000 사이의 난수를 하나 생성한다.
- 해당 수의 약수 목록을 출력한다.
- 그 수가 소수인지 판별한다.
- 소인수를 출력한다.
코드 예시
import random
# 1. 100~1000 사이 난수 생성
rNum = random.randint(100, 1000)
print(f'rNum: {rNum}')
# 2. 약수 출력
for num in range(1, rNum+1):
if rNum % num == 0:
print(f'[약수]: {num}')
# 3. 소수 판별
for num in range(2, rNum):
flag = True
for n in range(2, num):
if num % n == 0:
flag = False
break
if flag:
print(f'[소수]: {num}')
* 이 글은 제로베이스 데이터사이언스 파트타임 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.
💡 생각 정리
이번 코드를 직접 작성하면서, 단순히 외웠던 수학 개념(약수·소수·소인수)을 조건문과 반복문으로 구현하니 훨씬 구조적으로 이해됐다.
특히 flag 변수를 활용한 소수 판별 방식이 효율적이었다.
나누어떨어지는 순간 바로 False로 처리하는 로직 덕분에 불필요한 연산을 줄일 수 있었다.
또한 난수를 통해 다양한 수를 실습하면서
약수 → 소수 → 소인수 → 소인수분해로 확장되는 흐름을 자연스럽게 익힐 수 있었다.
🚀 적용점
- 소인수분해, 최대공약수(GCD), 최소공배수(LCM) 구현의 기초가 된다.
- 난수 기반의 수학 퀴즈 프로그램 제작에 활용 가능하다.
- flag 구조를 확장하면 에라토스테네스의 체(소수 찾기 알고리즘) 구현도 가능하다.
반응형
'데이터' 카테고리의 다른 글
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-17 (0) | 2025.11.04 |
|---|---|
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-16 (0) | 2025.11.03 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-14 (0) | 2025.11.01 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-13 (0) | 2025.10.31 |
| 제로베이스 데이터사이언스 스쿨 - Part 03. 기초 수학-12 (0) | 2025.10.30 |