진법 표현
모든 양의 정수 N은 다음과 같이 b의 거듭제곱의 항들로 유일하게 나타낼 수 있다.
N=ambm+am−1bm−1+⋯+a1b+a0 (0≤ai<b)
증명
나눗셈 정리에 의해 N=q1b+a0인 q1과 a0(0≤a0<b)이 유일히 존재한다.
만약 q1<b라면 종료한다.
그렇지 않다면 q1=q2b+a1 (0≤a1<b)인 q2와 a1이 유일히 존재한다.
N=q2b2+a1b+a0처럼 계속 진행하면 시행은 유한히 반복되고 종료된다.
따라서 이와 같은 표현은 존재한다. □
유일성 증명 생략
2진법과 이진 지수 알고리즘
특히 b=2일 때, 이를 2진법이라하며 0과 1로만 수가 표현된다.
105=(11010001)2처럼 쓸 수 있고, 79는 예를 들어
79=1⋅26+0⋅25+0⋅24+1⋅23+1⋅22+1⋅2+1
처럼 표현된다.
이진 지수 알고리즘은 PS에서 바로 거듭제곱을 O(logn)에 계산하도록 해주는 분할정복을 이용한 거듭제곱 알고리즘을 의미한다.
알고리즘
큰 수 k에 대해 ak(modn)을 알고싶다 하자.
k=(amam−1…a1a0)2 처럼 이진수로 나타낼 수 있다.
이를 이용해 부분적인 답을 구해 결과에 곱해줄 수 있다.
예를 들어,
5110(mod131) 을 보자.
5110=564+32+8+4+2=564⋅532⋅58⋅54⋅52≡105⋅74⋅114⋅101⋅25≡60(mod131) 이다.
이를 코드로 표현하면 다음과 같다.
ll poww(int a, ll b, ll mod = -1) {
ll ret = 1;
while (b) {
if (b & 1) {
ret *= a;
if (~mod) ret %= mod;
}
a *= a;
if (~mod) a %= mod;
b >>= 1;
}
return ret;
}
나눗셈 테스트
Theorem 4.4 ⭐️
P(x)=k=0∑mckxk를 정수계수 ck 들을 가진 x의 다항 함수라 하자.
a≡b(modn)이면, P(a)≡P(b)(modn)이다.
증명
a≡b(modn)일 때, 음이 아닌 정수 k에 대해,
ak≡bk(modn)이 되기 때문에, 각 k에 대해
ckak≡ckbk(modn)이 된다.
따라서
k=0∑mckak≡k=0∑mckbk(modn)
□
Corollary 1
a가 합동식 P(x)≡0(modn)의 해이고, a≡b(modn)이면, b또한 해이다.
∵P(a)≡P(b)=0(modn)이기 때문에 b도 해가 된다.
Theorem 4.5
N=am10m+am−110m−1+⋯+a1101+a0 일 때,
S=am+am−1+⋯+a1+a0 라고 하면,
쉽게 말하면 10진수로 표현했을 때, 자리수의 합이다.
9∣S⟹9∣N
증명
1≡10(mod9)⟹P(1)≡P(10)(mod9)
P(1)=am+am−1+⋯+a0 이므로 P(1)=S 이고, P(10)=N 이기 때문에 S≡N(mod9)
N≡0(mod9)일 필요충분조건은 S≡0(mod9) 이다. □
이제 n=9 일 때 말고, n=11 일 때도 비슷한 성질을 볼 수 있다.
Theorem 4.6
N=am10m+am−110m−1+⋯+a110+a0 일 때,
S=a0−a1+a2−a3+⋯+(−1)mam 이라 하면,
11∣S⟹11∣N
증명
−1≡10(mod11) 이다.
즉, P(−1)≡P(10)(mod11)
P(−1)=S , P(10)=N 이기 때문에,
S≡N(mod11) 임이 보인다.
N≡0(mod11)일 필요충분조건은 S≡0(mod11) 이다. □
Comments