일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 네이버 치지직
- Swift 문법
- iOS 개발 오류
- 애플 디벨로퍼 아카데미 후기
- 네이버 부스트캠프
- StateObject
- 숭실대
- 제앱소
- OS
- global soop
- 치지직
- ObservedObject
- useReducer
- 데이터베이스
- react
- 애플 디벨로퍼 아카데미
- apple developer academy 후기
- Swift 기능
- 운영체제
- swift문법
- 소프트웨어분석및설계
- Swift 디자인패턴
- Apple Developer Academy @ POSTECH
- sqoop
- ObservableObject
- 데이터베이스 공부
- 애플 디벨로퍼 아카데미 21주차 회고
- SWIFT
- 앱 비교 프로젝트
- 애플 아카데미 후기
- Today
- Total
사과하는 제라스
모듈러 연산(Modular Arithmetic) 본문
목차
모듈러 연산은 간단히 말하자면 나머지를 이용한 계산식이지만 여러 성질들이 있어 잘 사용하면 큰 수에 대한 연산 시 수고를 덜어준다.
다음은 모듈러 연산에 대한 증명 방법이다.
1. (A+B) % C = (A%C + B%C) % C
A mod C = a
B mod C = b
라고 하자.
A = a + iC
B = b + jC
(A+B) % C
= (a+b+(i+j)C) % C
= (a+b) % C
= (A mod C + B mod C) % C
2. (A-B) % C = (A%C - B%C) % C (1.과 같은 방식으로 증명 가능)
3. (A*B) % C = ((A%C) * (B%C)) % C
A mod C = a
B mod C = b
라고 하자.
A = a + iC
B = b + jC
(A*B) % C
= (ab + biC + ajC + ij*C^2) % C
= (ab) % C
= ((A mod C)*(B mod C)) % C
특히 3.과 같은 곱셈이 여러 개로 이루어진 식(가장 대표적으론 지수 형태의 수 ex)11^9)에서 분할 정복을 통해 접근할 수 있다.
11^9 mod 3
= 11^4 mod 3 * 11^4 mod 3 * 11 mod 3
= 11^2 mod 3 * 11^2 mod 3 * 11^2 mod 3 * 11^2 mod 3 * 11 mod 3
...
이런 식으로 2진법으로 쪼개나가는 방법을 이용할 수 있어서 계산의 편의성이 증가한다.
이와 더불어, 모듈러의 나눗셈 또한 존재하는데
이때는 분모의 역원을 구하고 그 값을 이용해서 식을 작성하면 된다.
ex)
- (7/10) mod 13을 구하고자 할 때,
10*4 mod 13 = 1 이므로
(7/10) mod 13
= (10*4 mod 13) * ((7/10) mod 13)
= 4*7 mod 13
= 2 mod 13
3번 곱셈의 모듈러 연산을 활용하여 구해낼 수 있다.
'알고리즘 학습 페이지' 카테고리의 다른 글
카운팅 정렬(Counting Sort) (0) | 2021.11.29 |
---|---|
합병 정렬(Merge Sort) (0) | 2021.11.26 |
유클리드 호제법(Euclidean Algorithm) (0) | 2021.11.26 |
기본 정렬 - Insertion sort(삽입 정렬) (0) | 2021.11.21 |
기본 정렬 - Bubble Sort(버블 정렬) (0) | 2021.11.21 |