진법 표현Permalink

모든 양의 정수 NN은 다음과 같이 bb의 거듭제곱의 항들로 유일하게 나타낼 수 있다.

N=ambm+am1bm1++a1b+a0 (0ai<b) N=a_mb^m+a_{m-1}b^{m-1}+\cdots+a_1b+a_0 ~(0 \le a_i < b)

증명

나눗셈 정리에 의해 N=q1b+a0N=q_1b+a_0q1q_1a0(0a0<b)a_0(0 \le a_0 < b)이 유일히 존재한다.

만약 q1<bq_1<b라면 종료한다.

그렇지 않다면 q1=q2b+a1 (0a1<b)q_1=q_2b+a_1~(0 \le a_1 < b)q2q_2a1a_1이 유일히 존재한다.

N=q2b2+a1b+a0N=q_2b^2+a_1b+a_0처럼 계속 진행하면 시행은 유한히 반복되고 종료된다.

따라서 이와 같은 표현은 존재한다. \square

유일성 증명 생략

2진법과 이진 지수 알고리즘Permalink

특히 b=2b=2일 때, 이를 22진법이라하며 0011로만 수가 표현된다.

105=(11010001)2105=(11010001)_2처럼 쓸 수 있고, 7979는 예를 들어

79=126+025+024+123+122+12+1 79=1 \cdot 2^6+0 \cdot 2^5+0 \cdot 2^4+1 \cdot 2^3 + 1 \cdot 2^2 + 1 \cdot 2 + 1

처럼 표현된다.

이진 지수 알고리즘은 PS에서 바로 거듭제곱을 O(logn)O(\log n)에 계산하도록 해주는 분할정복을 이용한 거듭제곱 알고리즘을 의미한다.

알고리즘Permalink

큰 수 kk에 대해 ak(modn)a^k \pmod n을 알고싶다 하자.

k=(amam1a1a0)2k=(a_ma_{m-1}\dots a_1a_0)_2 처럼 이진수로 나타낼 수 있다.

이를 이용해 부분적인 답을 구해 결과에 곱해줄 수 있다.

예를 들어,

5110(mod131)5^{110} \pmod {131} 을 보자.

5110=564+32+8+4+2=564532585452105741141012560(mod131)5^{110}=5^{64+32+8+4+2}=5^{64} \cdot 5^{32} \cdot 5^8 \cdot 5^4 \cdot 5^2 \equiv 105 \cdot 74 \cdot 114 \cdot 101 \cdot 25 \equiv 60 \pmod {131} 이다.

이를 코드로 표현하면 다음과 같다.

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;
}

나눗셈 테스트Permalink

Theorem 4.4 ⭐️Permalink

P(x)=k=0mckxkP(x)=\displaystyle \sum_{k=0}^{m} c_kx^k를 정수계수 ckc_k 들을 가진 xx의 다항 함수라 하자.

ab(modn)a \equiv b \pmod n이면, P(a)P(b)(modn)P(a) \equiv P(b) \pmod n이다.

증명

ab(modn)a \equiv b \pmod n일 때, 음이 아닌 정수 kk에 대해,

akbk(modn)a^k \equiv b^k \pmod n이 되기 때문에, 각 kk에 대해

ckakckbk(modn)c_ka^k \equiv c_kb^k \pmod n이 된다.

따라서

k=0mckakk=0mckbk(modn) \displaystyle \sum_{k=0}^m c_ka^k \equiv \sum_{k=0}^m c_kb^k \pmod n

\square

Corollary 1Permalink

aa가 합동식 P(x)0(modn)P(x) \equiv 0 \pmod n의 해이고, ab(modn)a \equiv b \pmod n이면, bb또한 해이다.

P(a)P(b)=0(modn)\because P(a) \equiv P(b) =0 \pmod n이기 때문에 bb도 해가 된다.

Theorem 4.5Permalink

N=am10m+am110m1++a1101+a0N=a_m10^m+a_{m-1}10^{m-1}+\cdots +a_110^1+a_0 일 때,

S=am+am1++a1+a0S=a_m+a_{m-1}+\cdots+a_1+a_0 라고 하면,

쉽게 말하면 10진수로 표현했을 때, 자리수의 합이다.

9S9N9 \mid S \Longrightarrow 9 \mid N

증명

110(mod9)P(1)P(10)(mod9)1 \equiv 10 \pmod 9 \Longrightarrow P(1)\equiv P(10) \pmod 9

P(1)=am+am1++a0P(1)=a_m+a_{m-1}+\cdots +a_0 이므로 P(1)=SP(1)=S 이고, P(10)=NP(10)=N 이기 때문에 SN(mod9)S \equiv N \pmod 9

N0(mod9)N \equiv 0 \pmod 9일 필요충분조건은 S0(mod9)S \equiv 0 \pmod 9 이다. \square


이제 n=9n=9 일 때 말고, n=11n=11 일 때도 비슷한 성질을 볼 수 있다.

Theorem 4.6Permalink

N=am10m+am110m1++a110+a0N=a_m^10^m+a_{m-1}10^{m-1}+\cdots+a_1^10+a_0 일 때,

S=a0a1+a2a3++(1)mamS=a_0-a_1+a_2-a_3+\cdots+(-1)^ma_m 이라 하면,

11S11N11 \mid S \Longrightarrow 11 \mid N

증명

110(mod11)-1 \equiv 10 \pmod {11} 이다.

즉, P(1)P(10)(mod11)P(-1) \equiv P(10) \pmod {11}

P(1)=SP(-1) = S , P(10)=NP(10)=N 이기 때문에,

SN(mod11)S \equiv N \pmod {11} 임이 보인다.

N0(mod11)N \equiv 0 \pmod {11}일 필요충분조건은 S0(mod11)S \equiv 0 \pmod {11} 이다. \square

Comments