Learn/수학
[수학] 정수론: 소수
앤오엔
2022. 2. 8. 04:58
모듈러 연산
모듈러 연산은 나눗셈의 나머지 연산을 뜻한다.
쉽게 말하면 어떤 실수 n 을 정수 a로 나누었을 때 발생하는 나머지를 구하는 계산법을 말한다.
파이썬에서는 기호 % 으로 구할 수 있다.
10 % 3 # 1 10 mod 3 : 10을 3으로 나눈 나머지
|
소수
소수의 정의
소수는 1보다 크고 자기 자신보다 작은 자연수 두 개를 곱해 만들 수 없는 수를 뜻한다.
즉, 1과 자기 자신 말고는 약수가 없는 자연수를 일컫는다.
합성수는 1보다 큰, 소수가 아닌 자연수를 말한다.
여기서 중요한 건 1은 소수도, 합성수도 아니라는 점이다.
소수를 판별하는 방법은 모듈러 연산을 활용한 방법과 에라토스테네스의 체를 활용한 방법, 2가지가 있다.
소수 판별법 (1) - 모듈러 연산
p를 a로 나눴을 때 나머지가 0인 a가 있으면 합성수라는 점을 이용한다. (단, 1<a<p)
소수 판별법 (2) - 에라토스테네스의 체 적용
에라토스테네스의 체는 주어진 범위에서 소수를 빠르게 찾는 방법으로,
2부터 2의 배수, 3의 배수, 5의 배수, ... 순서로 다음 소수의 배수를 모두 지우고 남는 숫자들이 소수라는 것이다.
즉, 어떤 소수를 찾고 그 소수의 모든 배수를 제거하는 것이 에라토스테네스의 체에서 알고리즘 핵심이다.
n보다 작은 모든 소수의 리스트 구하기
def eratosthenes(n):
sieve = [True] * n # n개의 True 값이 들어있는 목록 (True는 소수, False는 합성수를 의미)
# 2부터 n까지 하나씩 순차적으로 소수 여부를 판단
for i in range(2, n):
# 1. i가 소수인 경우 i의 배수를 False로 변경
for j in range(i+i, n, i):
sieve[j] = False
# 2. i는 소수이므로 True값을 유지
# return True
# 값이 True인 숫자(소수)를 추려낸다.
result = []
for i in range(2, n):
if sieve[i] == True :
result.append(i)
return result
소인수 분해
소인수 분해와 소인수
- 소인수 분해: 소수들의 곱으로 수를 나타낸 것
- 소인수: 소인수 분해의 곱에 사용된 소수
※ 엘리스《프로그래밍 수학》를 듣고 이해한 바를 정리한 것으로, 사실과 다른 부분이 있을 수 있음.