제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.11]
[강의 요약]
[Part 02. 수학_Ch 01. 기초 수학] 강의 수강
01_약수와 소수부터 06_최대공약수(파이썬)까지 강의 수강하였음
🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰▰▰▰ ] 26/100일 (26%)
드디어 수학 부분!
심플하게 정리해 봤다.
[약수와 소수]
▶ 약수란?
어떤 수를 나누어 떨어지게 하는 수
예를 들어 15의 약수는 1, 3, 5, 15 임
8의 약수는 1, 2, 4, 8
22의 약수는 1, 2, 11, 22
▶ 소수란?
1과 자기 자신만을 약수로 가지는 수
(★ 1은 소수가 아니다!)
예를 들어 2, 3, 5, 7, 11, 13, 17, 19 가 있다.
[약수와 소수_파이썬]
★ 파이썬에서는 for문과 if문을 활용하여 약수와 소수를 쉽게 판별할 수 있음
▶ 코드 : 파이썬으로 약수 출력
# 약수를 구하는 코드
num = int(input("숫자를 입력하세요: "))
for i in range(1, num + 1):
if num % i == 0:
print(i)
★ 출력 결과 ★
숫자를 입력하세요: 12
1
2
3
4
6
12
▶ 코드 : 파이썬으로 소수 출력
# 소수를 구하는 코드
num = int(input("숫자를 입력하세요: "))
for i in range(2, num + 1):
is_prime = True
for j in range(2, i):
if i % j == 0:
is_prime = False
break
if is_prime:
print(i)
★ 출력 결과 ★
숫자를 입력하세요: 10
2
3
5
7
[소인수와 소인수분해]
▶ 소인수란?
약수 중에서 소수인 수를 소인수라고 함
예시를 통해 이해해 보자
20의 약수 : 1, 2, 4, 5, 10, 20 → 소인수: 2, 5
12의 약수 : 1, 2, 3, 4, 6, 12 → 소인수: 2, 3
25의 약수 : 1, 5, 25 → 소인수: 5
41의 약수 : 1, 41 → 소인수: 41
▶ 소인수분해란?
1보다 큰 정수를 소인수들의 곱으로 표현하는 것
예시를 통해 이해해 보자
20 = 2 × 2 × 5 = 2² × 5
12 = 2² × 3
36 = 2² × 3²
25 = 5²
41 = 41 (소수이므로 자기 자신이 소인수)
▶ 소인수분해로 약수 구하기
소인수분해 결과를 활용하면 모든 약수를 손쉽게 구할 수 있음
20의 소인수분해 예시를 통해 이해해보자
20 = 2² × 5
가능한 조합은 다음과 같다.
2⁰ × 5⁰ = 1
2¹ × 5⁰ = 2
2² × 5⁰ = 4
2⁰ × 5¹ = 5
2¹ × 5¹ = 10
2² × 5¹ = 20
→ 약수: 1, 2, 4, 5, 10, 20
[소인수와 소인수분해_파이썬]
파이썬에서 while 문과 나머지 연산을 이용해 간단하게 소인수분해 가능함
▶ 코드 : 파이썬으로 소인수분해 구현
# 소인수분해 코드
num = int(input("숫자를 입력하세요: "))
i = 2
while num != 1:
if num % i == 0:
print(i)
num //= i
else:
i += 1
★ 출력 결과 ★
숫자를 입력하세요: 72
2
2
2
3
3
2³ × 3² = 72
▶ 제곱수를 만들기 위한 최소 곱 찾기
2 × x = 어떤 수의 제곱 (완전제곱수)
72 = 2³ × 3²
완전제곱수로 만들기 위해 짝수 지수로 보정해야 함
그러면?
2를 한 번 더 곱해줘야 2⁴ × 3² → 완전제곱수
따라서 x = 2
[최대공약수]
▶ 공약수란?
두 개 이상의 수에서 공통으로 가지는 약수
예시를 통해 이해해 보자
12의 약수 : 1, 2, 3, 4, 6, 12
20의 약수 : 1, 2, 4, 5, 10, 20
→ 공약수 : 1, 2, 4
▶ 최대공약수란?
공약수 중에서 가장 큰 수
예시를 통해 이해해 보자
12와 20의 공약수: 1, 2, 4
→ 최대공약수 : 4
▶ 최대공약수 구하는 방법
방법 1: 소인수분해 이용
공통된 소인수의 거듭제곱 중 작은 지수를 곱하면 된다.
예시를 통해 이해해보자
12 = 2² × 3
20 = 2² × 5
→ 공통 소인수 : 2 → 작은 지수는 2
→ 최대공약수 = 2² = 4
방법 2: 유클리드 호제법 (Euclidean Algorithm)
GCD(a, b) = GCD(b, a % b)
나머지가 0이 될 때까지 반복한다.
예시를 통해 이해해보자
- GCD(36, 12)
- 36 % 12 = 0 → 최대공약수는 12
- GCD(60, 36)
- 60 % 36 = 24
- 36 % 24 = 12
- 24 % 12 = 0 → 최대공약수는 12
[최대공약수_파이썬]
파이썬에서는 for문 또는 while문으로 손쉽게 구현 가능하다.
▶ 코드 : 파이썬으로 최대공약수 구하기
# 두 수의 최대공약수
a = int(input("첫 번째 숫자: "))
b = int(input("두 번째 숫자: "))
gcd = 1
for i in range(1, min(a, b) + 1):
if a % i == 0 and b % i == 0:
gcd = i
print("최대공약수:", gcd)
★ 출력 결과 ★
첫 번째 숫자: 12
두 번째 숫자: 20
최대공약수: 4
▶ 코드 : 세 수의 최대공약수 구하기
# 세 수의 최대공약수
a = int(input("첫 번째 숫자: "))
b = int(input("두 번째 숫자: "))
c = int(input("세 번째 숫자: "))
gcd = 1
for i in range(1, min(a, b, c) + 1):
if a % i == 0 and b % i == 0 and c % i == 0:
gcd = i
print("최대공약수:", gcd)
★ 출력 결과 ★
첫 번째 숫자: 12
두 번째 숫자: 54
세 번째 숫자: 72
최대공약수: 6
▶ 코드 : 유클리드 호제법 함수
# 유클리드 호제법 함수
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
print("최대공약수:", gcd(60, 36))
★ 출력 결과 ★
최대공약수: 12
[나의 생각 정리]
- 유클리드 호제법을 코드로 구현해보면서 수학적 사고가 알고리즘으로 연결된다는 점이 흥미로웠다.
[적용점]
- 앞으로 숫자 간의 규칙이나 배분 문제를 만났을 때, 최대공약수를 활용해 문제를 구조적으로 접근할 수 있을 것 같다.
- 유클리드 호제법은 코딩테스트 문제에서도 자주 등장하니, 함수화해서 익숙해지는 것이 좋을 것 같다.
“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”