읽기 전

  • 해당 게시물은 작성자가 학습한 내용을 정리 및 요약 목적으로 작성되었으므로 오역 및 오개념이 있을 수 있습니다. 바로잡기 위한 의견을 제시해주시면 매우 감사하겠습니다.

Analysis of Loops

알고리즘 문제를 해결함에 있어 시간복잡도는 매우 중요한 개념이고 코드에 포함된 연산과정이 어느 정도의 복잡도를 가지고 있는지 능숙하게 판단할 수 있는 지 여부가 전체 코드의 복잡도를 결정한다고 생각할 수 있다. 이번 게시글에서는 시간복잡도 함수 유형에 따라 어떤 연산의 형태를 갖는지 작성할 예정이다.

$O(1)$

loop를 포함하지 않고 1회성 연산임을 의미한다. swap()함수에 이에 해당한다. 그리고 정해진 횟수만큼 loop를 도는 경우에도 시간복잡도는 O(1)로 간주한다. [$c$]

// 여기서 c는 상수
for(int i=1; i<=c; i++){
  // 임의의 O(1) 연산 과정
}

위의 경우 loop문 내에 O(1)의 연산과정이 있고 주어진 input값에 관련이 없는 상수 c회 만큼 반복하는 코드의 예시이다. 위 코드의 전체 수행과정은 n과 연관이 없고 상수 c와 연관이 있기 때문에 O(n)이 아닌 O(1)이다.

$O(n)$

O(n)은 loop의 매개변수가 정해진 수만큼 순차적으로 증가하거나 감소하면서 시행되는 경우를 의미한다. [$\frac{n}{c}$]

// 여기서 c는 상수
for(int i=1; i<=n; i+=c){
  // 임의의 O(1) 연산과정
}

for(int i=n; i>0; i-=c){
  // 임의의 O(1) 연산과정
}

위의 경우 loop문 내에 O(1)의 연산과정이 포함되어 있고 주어진 input값에 따라 n만큼 반복하는 코드이며 매개변수는 최대 n부터 1까지 일정하게 c만큼 감소하거나 증가한다. c가 1이면 전체 수행과정은 n이고 c가 임의의 상수이면 $\frac{n}{c}$가 된다. 결국 코드의 수행시간은 n과 관련되어 있으므로 O(n)으로 표기할 수 있다.

$O(n^c)$

$O(n^c)$은 같은 횟수만큼의 loop가 nest형태로 이루어진 경우를 의미한다. [$\frac{n}{c}\cdot\frac{n}{c}$]

for(int i=1; i<=n; i+=c){
  for(int j=1; j<=n; j+=c){
    // 임의의 O(1) 연산과정
  }
}

for(int i=n; i>0; i-=c){
  for(int j=n; j>0; j-=c){
    // 임의의 O(1) 연산과정
  }
}

예제는 수행시간이 n인 loop문을 2번 감싸서 시간복잡도가 $O(n^2)$이다. 만약 k번 감싸면 시간복잡도는 $O(n^k)$가 될 것이다. 알고리즘 문제를 해결함에 있어 최적화된 해결방법을 찾을 수 없어 전수조사를 해야할 때 일반적으로 $O(n^2)$의 방법을 생각하게 된다. 만약 코드를 작성하였는데 $O(n^2)$이다 싶으면 더 최적화 할 순 없는지 다시 돌아가서 고민해보자. 물론 전체를 확실히 검사해야 하는 backtracking 기법도 문제에 자주 출제되고 있기 때문에 마냥 안좋게만 생각할 수는 없으니 문제 해결을많이 해보면서 감각을 키워야겠다..

$O(log\ n)$

$O(log\ n)$은 loop의 매개변수가 일정 값만큼 곰하거나 나뉘어질 경우를 의미한다. [$log_{c}n$]

for(int i=1; i<=n; i*=c){
  // 임의의 O(1) 연산과정
}

for(int i=n; i>0; i/=c){
  // 임의의 O(1) 연산과정
}

왜 매개변수가 일정 값만큼 곱하거나 나뉘어질 경우 시간복잡도가 $O(log\ n)$인지는 간단하다. 첫번째 loop의 매개변수는 1이고 점차 $c,\ c^2,\ \cdots,\ c^k$로 증가하는데 종료시점은 k가 $log_{c} n$값을 가짐으로써 매개변수가 n이 되는 시점이기 때문이다.

그러나 반복문 내 매개변수가 위와 같이 변하는 코드는 쉽게 볼 수 없다. 왜냐하면 보통 예제와 같이 코드가 작성되지 않고 재귀함수의 형태로 input값을 c만큼 나누거나 곱하기 떄문이다. 예를 들면, 이진탐색의 경우 처음 input은 크기가 n인 정렬된 배열이지만 1회의 연산 후 다시 함수를 호출할 때의 input은 2로 나눈 값으로 마지막 수가 남을 때까지 O(1)의 연산 후 호출된 함수에 입력하는 input값은 2로 나눈 값이다. 그러므로 이진탐색의 처음 input값은 n이고 매개변수를 나누는 상수값은 2로 [$log_{2} n$]의 형태로 표현된다는 것을 알 수 있다.

$O(log(log\ n))$

$O(log(log\ n))$은 loop의 매개변수가 지수함수적으로 증가하거나 나뉘는 경우를 의미한다. [$log_{c}(log_{i}n)$]

for(int i=2; i<=n; i=pow(i,c)){ // pow함수는 i^c의 값을 구한다.
  // 임의의 O(1) 연산과정
}

처음 매개변수가 $i$라고 할 때, 위의 코드처럼 매개변수의 지수가 c만큼 증가한다고 하자. 그러면 반복문의 매개변수는 $i^c,\ i^{c^2},\ \cdots,\ i^{c^k}$로 증가하는데 종료시점은 $i^{c^k}=n$이 되는 시점이다. 이 식을 만족하게 하는 k값은 $log_{c} log_{i} n$이므로 위의 코드의 시간복잡도는 $O(log(log\ n))$이 된다.

Calculating Time Complexity of loops

연속된 loop문에 대한 시간복잡도 계산

서로 종속되지 않고 분리된 반복문에 대한 시간복잡도는 각각 개별 loop문의 시간복잡도를 더한 뒤 input 값에 대해 정리한다.

for(int i=1; i<=m; i+=c){
  // 임의의 O(1) 연산
}
for(int j=1; j<=m; j+=c){
  // 임의의 O(1) 연산
}

위 코드의 경우 서로 종속되지 않고 input 값이 각각 m, n인 반복문이다. 첫 번째 반복문의 시간복잡도는 O(m)이고 두 번째 반복문의 시간복잡도는 O(n)이다. m, n이 각각 정해진 상수가 아니라면 전체 시간복잡도는 O(m+n)이고 만약 $m=n$인 경우 시간복잡도는 O(2n)이 된다.

loop문 내에 if문이 많이 삽입되어 있는 경우의 시간복잡도

알고리즘 문제를 해결함에 있어 최대한 불필요한 경우의 수를 줄이기 위해 if문을 많이 사용한다. 그러나 시간복잡도를 따질 때에는 최악의 경우를 가정하여 계산하는 것이 전체 수행시간을 판단할 때 안전하다. 그러므로 if문이 포함된 반복문의 시간복잡도는 모든 조건에 대해 만족하지 않아 모든 if문에 대해 검사를 진행했을 경우를 가정하고 계산해야 한다.

만약 if문이 너무 복잡하게 삽입되어 있는 경우라면 해당 if문이 최대 시간복잡도를 구한 뒤 치환하여 간략화할 수 있다.

재귀함수의 시간복잡도 계산

재귀함수는 $O(log\ n)$ 항목에서 설명하였듯이 반복되는 연산을 input값만 변화를 주게끔 하고자 사용된다. 그렇기 때문에 반복문의 성격으로 코드를 볼 것이 아니라 재귀함수를 호출하고 다음 재귀함수를 호출할 때 입력되는 input값이 어떻게 변화하는 지 확인하여 시간복잡도를 계산해야 한다. 이에 대해 재귀함수가 어떻게 전개되는 지 다음 포스팅에서 작성하고자 한다.

참고자료

  1. Analysis of Loops

읽기 전

Lower와 Upper Bound의 개념을 정리하면서 많은 사람들이 상/하한과 상/하계라는 용어를 같이 쓰고 있어 혼란스러웠다. 다행히 두 개념을 구분해서 설명해주신 분을 찾아 해당 게시글의 내용을 참고하여 작성하였다.

상계(Upper Bound) & 하계(Lower Bound)

상계란 실수 $b$가 집합 $A$의 모든 원소들보다 크거나 같을 때 즉, $a\in A$일 경우 $a\le b$ 이면 $b$를 집합 $A$의 상계(Upper bound)라 한다. 그리고 집합 A는 상계를 가지고 있으므로 위로 유계(bounded above)이다.

하계란 실수 $b$가 집합 $A$의 모든 원소들보다 작거나 같을 때 즉, $a\in A$일 경우 $a\ge b$ 이면 $b$를 집합 $A$의 하계(Lower bound)라 한다. 그리고 집합 A는 하계를 가지고 있으므로 아래로 유계(bounded below)이다.

집합 A의 상계와 하계 모두 존재하면 유계(bounded)라 한다.

위의 정의에서 우리는 상계와 하계는 유일하지 않다는 점을 알아낼 수 있다.

  • Ex. 집합 $A = { x\in\mathbb{R} | -1 \le x< 2 }$의 상계와 하계의 범위를 작성해라.

    위 문제에서 A의 하계는 $x \le -1$인 모든 실수이고 상계는 $2 \le x$인 모든 실수이다.

상한(Supremum) & 하한(Infimum)

집합 $A$의 상계들의 집합을 $U$라 하면 $U$의 최소원소를 집합 $A$의 상한이라 하고 $\sup{A}$혹은 ⋁ $A$라 쓴다. 영어로 Least Upper Bound라 표현하고 상계 중 가장 작은 원소를 의미한다.

집합 $A$의 하계들의 집합을 $L$이라 하면 $L$의 최대원소를 집합 $A$의 하한이라 하고 $\inf{A}$ 혹은 ⋀ $B$라 쓴다. 영어로 Greatest Lower Bound라 표현하고 하계 중 가장 작은 원소를 의미한다.

무한집합에는 최대/최소 원소가 없을지라도 모든 집합(유,무한)에는 $\sup{A}$와 $\inf{A}$가 존재한다. 그리고 각각은 유일하다.

하계 이론(Lower Bound Theory)

알고리즘 $A(n)$에 대해 어떤 랜덤한 input을 넣었을 때 소요되는 시간이 $t(n)$보다 적을 순 없고 $A(n)$의 모든 연산은 최소한 $t(n)$ 이상의 시간을 가질 때 $t(n)$을 Lower Bound라 한다. 그리고 $t(n)$ 값을 계산할 수 있다면 실제 알고리즘의 복잡도와 비교하여 그것이 최선인지를 선언할 수 있다.

  1. Trivial Lower Bound - input값과 output값을 기반으로 Lower Bound를 계산한다.

    예를들어 NxN 행렬 2개의 곱연산을 할 때, input은 $2n^2$개이고 ouput은 $n^2$이다. 이 경우 Lower Bound는 $O(n^2)$이다.

  2. Calculating Lower Bound - 이진탐색트리와 같이 계산 가능한 경우

    n개의 원소에 대해 노드 수 $2^k-1$개의 트리를 구성했다고 가정하자.

    • 최악의 경우: n개의 원소에 대해 모두 비교한 경우이므로 $O(n)$
    • 최선의 경우: 각 tree level당 1번 비교한 경우이므로 $k\ge log_{2}{n}$에 따라 $O(log{n})$

$a_nx^n+a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+\cdots+a_1x+a_0$의 시간복잡도는?

일반적으로 $n+(n-1)+(n-2)+\cdots+2+1$이라고 생각하여 $O(n^2)$로 판단할 수 있다. (제곱계산*합계산) 그러나, 마지막부터 역순으로 점화식 형태를 유지하며 정리하면 $((\cdots(a_nx+a_{n-1})x+a_{n-2})x+\cdots)x+a_1)x+a_0$가 된다. 그러면 일반항은 $A=(A'+a_k)x$가 되는데 이 일반항을 $k=n$부터 $k=1$까지 돌린 후 마지막으로 $a_0$을 더하면 된다. 그러므로 시간복잡도는 $O(n)$이다.

상계 이론(Upper Bound Theory)

알고리즘의 상계를 $U(n)$라고 하자. 그러면 모든 경우의 계산에 대해 $U(n)$보다 적은 시간을 가지고 수행할 수 있음을 의미한다. 최악의 경우라도 수행 시간은 상계보다 작기 때문에 최적을 논하는 알고리즘에선 크게 의미를 갖지 못한다.

참고자료

  1. Lower and Upper Bound Theory
  2. 상한(Supremum)과 하한(Infimum)

소수와 합성수란

  • 양의 정수 p $(p\ne1)$가 p와 1 이외의 양의 약수를 갖지 않을 때 p를 소수(Prime Number)라고 정의한다.

  • 1을 제외한 수 중 소수가 아닌 수를 합성수(Compositive Number)라고 부른다.

정리: 1보다 큰 양의 정수는 소수인 약수를 가진다.

1보다 큰 양의 정수 n에 대해 집합 S는 1보다 큰 n의 약수 집합이라고 정의하자. $n \in S$이므로 S는 공집합이 아님을 확인할 수 있다. 자연수의 순서 공리에 의해 자연수로 이루어진 n의 약수집합의 부분집합 S는 최소원소 p를 갖는다. 이 때 p는 소수이다. (∵ p가 소수가 아니라면 p보다 더 작은 인수 q가 최소원소여야 하기 때문에 모순이다.)

정리: 소수는 무한히 많다.

소수의 개수가 유한하다고 가정하자. (ex. $p_1\cdot p_2\cdot p_3\cdots p_n$) 그리고 임의의 정수 N이 $1+p_1\cdot p_2\cdots p_{n-1}\cdot p_n$이라고 하면 앞서 설명한 정리에 따라 소수약수 p를 갖는다. 하지만 gcd(N,N-1)=1이므로 소수약수 p는 유한하다고 가정한 소수집합에 포함될 수가 없다. 그러므로 소수의 개수가 유한하다는 가정에 모순된다.

산술의 기본정리(Fundamental Theorem of Arithmetic)

n이 1보다 큰 자연수이면 n은 소수이거나 소수의 곱으로 표현이 가능하며 n이 소수의 곱으로 표현될 경우 곱하는 순서를 무시하면 표현방법은 유일하다.

n이 소수일 경우 증명의 필요성이 없기 때문에 합성수라고 가정하면 n의 약수 중 소수인 약수를 무조건 가진다. 그 소수를 $p_1$이라고 했을 때 $1<n_1<n$을 만족하는 적당한 자연수 $n_1$이 존재하여 $n=n_1p_1$을 만족한다.

만약 $n_1$이 소수이면 $n$은 이미 소수의 곱으로 표현되었다고 할 수 있으므로 $n_1$이 $1<n_1<n$인 합성수라고 하자. 따라서 $n_1$도 양의 약수 중 소수가 존재한다. 그 약수를 $p_2$이라고 하면 $1<n_2<n_1$을 만족하는 적당한 자연수가 존재하여 $n_1=p_2n_2$가 되고 $n=p_1p_2n_2$이다.

마찬가지로 $n_2$가 소수인지 합성수인지에 따라 검사하며 과정을 반복하면 $n>n_1>n_2>\cdots>1$이고 $n,n_1,n_2\cdots,1$은 자연수이므로 그 과정이 유한하다. 그러므로 $n_k$가 소수가 되도록 하는 k는 존재하며 $n_k=p_k$라고 하면 $n=p_1p_2\cdots p-k$이다. 따라서, 합성수 n은 소수의 곱으로 표현할 수 있다.

그리고 그 표현방법이 유일함을 증명하기 위해 유한하지 않다고 가정하여 $n=p_1p_2\cdots p_r=q_1q_2\cdots q_s$라고 하자. r, s는 자연수이고 n을 이루는 소수들은 $p_1\le p_2\le\cdots\le p_r$, $q_1\le q_2\le \cdots\le q_r$의 관계를 만족한다.

$p_1|q_1q_2\cdots q_s$이므로 적당한 자연수 i에 대해 $p_1=q_i\ge q_1$을 만족하며 역으로 $q_1|p_1p_2\cdots p_r$이므로 적당한 자연수 j에 대해 $q_1=p_j\ge p_1$를 만족한다. $p_1$과 $q_1$는 각각에 대해 가장 작은 자연수이므로 $p_1=q_1$이다. 따라서 양변에서 두 수를 소거한 뒤 $p_2$와 $q_2$에 대해서도 같은 과정을 반복할 수 있다. 계속 반복하다 보면 결국 $r=s$가 아니면 모순이 발생한다는 점을 알 수 있다.

만약 $r\ne s$인 경우 r>s라 하자. 앞서 설명한 과정을 반복했을 때 마지막으로 $p_{s+1}\cdots p_r=1$가 되어 모순이 발생한다. 그러므로 곱하는 순서를 고려하지 않는다면 합성수를 소수의 곱으로 표현하는 방법은 유일함을 확인할 수 있다.

정리: 임의의 양의 정수 m이 $\sqrt{m}$보다 작거나 같은 약수를 갖지 않으면 m은 소수이다.

명제의 대우가 참이면 해당 명제도 참이므로 "m이 합성수이면 $\sqrt{m}$보다 작거나 같은 약수를 가진다."를 증명하자.

m이 소수가 아니라고 가정하면 m은 1과 m 이외의 약수 p를 갖는다. 즉, $m=pq$, $1<p\le q<m$이 성립한다. $m=pq\ge q^2$에서 $q\le\sqrt{m}$이므로 m은 $\sqrt{m}$보다 작거나 같은 약수를 갖는다.

예제

임의의 정수 n에 대하여 $n^4-20n^2+4$는 소수가 아님을 보여라

문제에서 제시된 식을 합차공식의 형태로 정리하면 $n^4-4n^2+4-16n^2$가 되고 $(n^2-2)^2-(4n)^2$가 되어 $(n^2+4n-2)(n^2-4n-2)$가 된다. 주어진 수가 소수라면 둘 중 하나는 1 혹은 -1의 값을 가져야 한다. 따라서, $n^2+4n-2=\pm1$, $n^2-4n-2=\pm1$의 4가지 경우에서 정수해를 갖는 경우가 존재하면 합성수이다. 하지만 우변을 좌변으로 이항하여 정리하여도 정수해가 존재하지 않음을 확인할 수 있다.

$41pm-42p^2=m^3$을 만족하는 양의 정수 m이 존재하게끔 하는 소수 p의 값을 모두 더하여라.

$p(41m-42p)=m^3$에서 $p|m$이다. 따라서 적당한 정수 k에 대해 $m=pk$라 하면 $41p^2k-42p^2=p^3k^3$이고 양변에서 $p^2$을 소거하면 $41k-42=pk^3$이다. 그리고 k에 대해 정리하면 $k(41-pk^2)=42$이다. 즉, $k|42$이고 $41k-42>0$ 으로 인해 k>1이고 $41>pk^2$에 따라 p가 최소값인 2가 되더라도 k<4를 만족해야 한다. 즉, k가 취할 수 있는 값은 2, 3이다.

  • k=2이면 $41-4p=21$에 따라 p=5
  • k=3이면 $41-9p=14$에 따라 p=3

소수 p, r (p>r)에 대하여 $p^r+9r^6$이 정수의 제곱일 때, p+r의 값을 구하여라

$p^r+9r^6=k^2$이라고 하자. 그럼 합차 공식에 따라 $p^r=(k+3r^3)(k-3r^3)$로 정리할 수 있다. 그렇다면 $r=a+b,\ (a<b)$에 대해 $k+3r^3=p^b,\ k-3r^3=p^a$로 표현할 수 있다. 미지수 k를 소거하기 위해 서로 뺴면 $p^b-p^a=6r^3$이 된다. 즉, $a\ne0$이면 $p|6r^3$으로 p는 2, 3, r 중 하나를 인수로 가져야 한다. 문제에 제시된 정의에 따라 p는 p>r인 소수이므로 p=3, r=2의 값을 가질 수 있다. 그러나 $p^r+9r^6$에 대입하면 $3^2+9\cdot2^6$가 되어 $9(2^6+1)$이므로 제곱수가 성립되지 않아 a=0임을 확인하였다.

따라서 a=0이므로 b=r이다. p>r이므로 p는 홀수이고 그와 함께 k도 홀수가 된다. a=0을 대입하면 $3r^3+1=k$에 따라 r은 짝수여야 한다. 짝수인 소수는 2밖에 없으므로 r=2이다. $3r^3+1=k$으로 인해 k=25이고 $k-3r^3=25+3\cdot2^3=49=p^2$에 따라 p=7이다.

다음 조건을 만족하는 소수 a, b, c에 대하여 세수의 곱 abc를 구하여라

  • $b+8$은 a의 배수이고, $b^2-1$은 a와 c의 배수이다.
  • $b+c=a^2-1$이다.

$b^2-1=ak$라고 하자. 문제의 조건에 b+8도 a의 배수라고 제시되었으므로 합차 공식의 형태로 만들면 $ak-63=b^2-64=(b+8)(b-8)$이다. 우변이 a의 배수이므로 좌변도 a의 배수여야 한다. 그렇기 때문에 $a|63$이 성립해야 한다. a는 소수이므로 3, 7을 가질 수 있다.

  1. a=3일 때, b+c=8이고 가능한 순서쌍은 (3,5), (5,3)이다. 그러나 두 경우 모두 $a|b+8$이 성립하지 않는다.
  2. a=7일 때, b+c=48이고 b+8은 7의 배수이다. b가 소수이면서 조건을 만족하는 값은 13, 41이다. c또한 소수여야 하므로 b, c가 취할 수 있는 값은 (41, 7)이다.

모든 양의 정수 k에 대하여 $2^{2^k}+2^{2^{k-1}}+1$은 소수인 약수를 k개 이상 가짐을 보여라

$a=2^{2^{k-1}}$이라 하면 $a^2+a+1$꼴이 되어 인수분해가 되지 않는다. 따라서 차수를 높이기 위해 $a=2^{2^{k-2}}$라 두면 $a^4+a^2+1$이 된다. 앞의 계수를 모르기 때문에 임의의 정수인 x, y를 계수로 가정하여$(a^2+xa+1)(a^2+ya+1)$이라 두고 전개하면 $a^4+a^3(x+y)+a^2(2+xy)+a(x+y)+1$이다. 2+xy=1이고 x=-y에 따라 인수분해 결과는 $(a^2-a+1)(a^2+a+1)$이 되어 $(2^{2^{k-1}}-2^{2^{k-2}}+1)(2^{2^{k-1}}+2^{2^{k-2}}+1)$이 된다. 그렇다면 같은 방법을 통해 $a=2^{2^{k-3}}$이라 가정하면 $(2^{2^{k-1}}-2^{2^{k-2}}+1)(2^{2^{k-2}}-2^{2^{k-3}}+1)(2^{2^{k-2}}+2^{2^{k-3}}+1)$이 되고 끝까지 그 과정을 반복하면 $(2^{2^{k-1}}-2^{2^{k-2}}+1)\cdots(2^{2^1}-2^{2^0}+1)(2^{2^1}+2^{2^0}+1)$이다. 마지막 항이 각각 3과 7이 되어 모든 항이 1보다 큼을 알 수 있다.

위에서 인수분해한 결과에 따라 약수를 얼마나 가질 수 있는지 검사하려면 우선 $gcd(a^2+a+1,a^2-a+1)$이 어떻게 되는지 확인해야 한다. $gcd(a^2+a+1,a^2-a+1)=d$라 하자. $d|a^2+a+1$, $d|a^2-a+1$이므로 서로 뺀 값인 2a도 d의 배수이다. 그러나 $a(a+1)+1$과 $a(a-1)+1$ 모두 홀수이므로 모순이다. 따라서 d는 1이다.

즉, 인수분해된 각 항들의 관계는 서로소이고 ((k-1)-1+1)+1=k개 항을 가짐에 따라 주어진 식은 소수인 약수를 k개 갖는다.

양의 정수 m, n(m>n)에 대하여 $\frac{m^2-n^2}{2n}$이 1000보다 작은 소수가 될 때, $m-n$의 최솟값과 최댓값의 합을 구하여라

다른 자료를 참고한 결과 대부분 $\cfrac{m^2-n^2}{2n}=p^2 \ or \ p$로 가정하여 해결하지만 제곱수를 찾아야 하는 등 쉽지 않다. 따라서 다른 출처의 풀이과정을 인용하여 작성하기로 하였다.

문제에 제시된 수식이 합차공식의 형태를 띠고 있어 $(m+n)(m-n)$꼴로 표현되므로 $2n={(m+n)-(m-n)}$이라고 변형하자. 그러면 $(m+n)(m-n)={(m+n)-(m-n)}p$라고 할 수 있다. 그리고 $m+n=Ga$, $m-n=Gb$, $gcd(a,b)=1$라고 표현하여 위 식에 대입하면 $GaGb=G(a-b)p$가 되고 정리하면 $Gab=(a-b)p$가 된다. 앞에서 가정한 $gcd(a,b)=1$ 조건으로 인해 (a-b)|G, ab|p임을 알 수 있다. 그러나 p는 소수이고 $a>b$이므로 $a=p$, $b=1$이다. a, b값을 다시 대입하면 $Gp=(p-1)p$가 되어 $G=p-1$이고 모든 값을 m, n에 대입하였을 때 $m+n=p(p-1)$, $m-n=p-1$가 됨을 확인하였다.

$m-n$의 값이 최솟값이 되려면 p가 최소여야 한다. 그러나 p가 2일 경우 m, n은 정수라는 전제에 성립하지 않으므로 p가 3일 경우부터 검사한다. 그리고 m-n의 값이 최댓값이 되려면 p가 1000이하의 소수 중 가장 큰 값이 되어야 한다. 즉, p가 997인 경우부터 검사하면 된다.

  • p가 3일 경우, $m=n+2$가 되고 $2n+2=6$이 되어 $n=2$, $m=4$가 성립한다. 따라서 $m-n$의 최소값은 2이다.

  • p가 997일 경우 $m=n+996$이 되고 $2n+996=997\cdot996$이다. n에 대해 정리하면 $n=\cfrac{996^2}{2}$이고 $m=n+996$이 되어 양의 정수 조건을 만족한다.

따라서, $m-n$의 최솟값과 최댓값의 합은 998이다.

풀이 링크

작성에 도움이 된 자료

  • KMO 수학경시 정수론, 장환수학, 임장환 저


약수와 배수 문제 유형 1

정리: 임의의 정수 a, b에 대하여 다음 식이 성립한다.

  • $(a-b)|(a^n-b^n)\quad$ $n\in N$
  • $(a+b)|(a^{2n}-b^{2n})\quad$ $n\in N$
  • $(a+b)|(a^{2n-1}+b^{2n+1})\quad$ $n\in N$

$a^n-b^n=(a-b)(a^{n-1}+a^{n-2}b+a^{n-3}b^2+\cdots+ab^{n-2}+b^{n-1})$

$a^n-1=(a-1)(a^{n-1}+a^{n-2}+\cdots+a+1)$을 참고하면 된다.

예제

n이 자연수일 때, $323|20^{2n}+16^{2n}-3^{2n}-1$이 성립함을 보여라

$323=17\cdot19$

$20^{2n}+16^{2n}-3^{2n}-1$ = $(20^{2n}-3^{2n})+(16^{2n}-1^{2n})$

$20-3|(20^{2n}-3^{2n})$, $16+1|(16^{2n}-1^{2n})$

따라서 주어진 식은 17의 배수이고 동일한 방법으로 19의 배수임을 증명할 수 있다.

약수와 배수 문제 유형 2

예제

방정식 $xy+yz+zx=xyzm$을 만족시키는 자연수 해를 구하라

주어진 수식을 xyz로 나누면 $\cfrac{1}{z}+\cfrac{1}{x}+\cfrac{1}{y}=m$이다. 그리고 문제에서 미지수 x, y, z에 대해 대칭이므로 임의로 $x \le y \le z$라고 가정해도 일반성을 잃지 않는다. 따라서 가정에 따라 $\cfrac{1}{z}\le\cfrac{1}{y}\le\cfrac{1}{x}$가 성립한다.

가정에 따라 $m\le\cfrac{3}{x}$에 의해 가능한 m의 값은 1,2,3이다. (자연수 해이므로)

  • m=3일 때, x=1이고 $\cfrac{1}{y}+\cfrac{1}{z}=2$에서 y=z=1으로 (1,1,1)이 성립한다.

  • m=2일 때, x=1이고 $\cfrac{1}{y}+\cfrac{1}{z}=1$에서 y=z=2로 (1,2,2)가 가능하며 x,y,z가 서로 대칭이므로 가능한 가지수는 3개이다.

  • m=1일 때 x가 취할 수 있는 값은 1, 2이다.

    • x=2일 때, $\cfrac{1}{y}+\cfrac{1}{z}=\cfrac{1}{2}\le\cfrac{2}{y}$에서 y는 3, 4를 취할 수 있다.
      • y=3일 때, z=6
      • y=4일 때, z=4
    • x=3일 때, $\cfrac{1}{y}+\cfrac{1}{z}=\cfrac{2}{3}\le\cfrac{2}{y}$에서 y는 3을 취할 수 있다.
      • y=3일 때, z=3

    따라서 순서쌍 (2,3,6), (2,4,4), (3,3,3)을 가지고 서로 대칭임을 고려하여 가능한 가지수는 6+3+1로 10개이다.

따라서 가능한 총 순서쌍의 개수는 14개이다.

$\frac{1}{a}+\frac{1}{b}+\frac{1}{c}+\frac{1}{abc}=1$를 만족하는 서로 다른 자연수 a, b, c의 순서쌍 (a,b,c)는 모두 몇 개인가?

a, b, c에 대해 대칭이므로 $a\le b\le c$라 가정하여도 일반성을 잃지 않는다. 그리고 a=1인 경우 성립하지 않으므로 $2\le a\le b\le c$이다.

가정에 따라 역수를 취한 $\cfrac{1}{abc}<\cfrac{1}{c}\le\cfrac{1}{b}\le\cfrac{1}{a}$ 관계가 성립하고 문제의 수식에서 $1=\cfrac{1}{a}+\cfrac{1}{b}+\cfrac{1}{c}+\cfrac{1}{abc}\le\cfrac{3}{a}+\cfrac{1}{abc}<\cfrac{4}{a}$을 만족한다. 정리하면 a<4이고 a가 취할 수 있는 값은 2, 3이다.

  • a=2일 때, $\cfrac{1}{b}+\cfrac{1}{c}+\cfrac{1}{2bc}=\cfrac{1}{2}$에서 양변에 2bc를 곱해 정리하면 2(b+c)+1=bc이다. 두 수의 곱으로 표현하면 (b-2)(c-2)=5로 표현할 수 있고 가정한 관계에 따라 b=3, c=7을 만족한다.
  • a=3일 때, $\cfrac{1}{b}+\cfrac{1}{c}+\cfrac{1}{3bc}=\cfrac{2}{3}$에서 양변에 3bc를 곱해 정리하면 3b+3c+1=2bc이다. 두 수의 곱으로 표현하기 위해 양변에 2를 곱하여 정리하면 (2b-3)(2c-3)=11이고 가정한 관계에 따라 b=2, c=7인데 $a\le b$이므로 모순이다.

따라서 가능한 순서쌍은 (2,3,7)이고 a,b,c가 가질 수 있는 순서쌍은 (2,3,7)을 배열한 가짓수인 6개이다.

약수와 배수 문제 유형 3

예제

$(a-1)(b-1)(c-1)$이 $(abc-1)$의 약수가 될 a, b, c를 모두 구하여라. (단, 1<a<b<c)

임의의 자연수 $k=\cfrac{abc-1}{(a-1)(b-1)(c-1)}$이라 가정하면 $k<\cfrac{abc}{(a-1)(b-1)(c-1)}$이고 각각에 대해 풀어서 $(1+\cfrac{1}{a-1})(1+\cfrac{1}{b-1})(1+\cfrac{1}{c-1})$이 된다. k가 최대값을 가지는 경우는 a=2, b=3, c=4인 경우이고 대입해서 정리하면 k<4의 결과를 얻을 수 있다. 그리고 $\cfrac{abc-1}{ab(c-1)}=\cfrac{abc-1}{abc-ab}=1+\cfrac{ab-1}{abc-ab}<k$로 1<k가 성립하여 k가 가질 수 있는 값은 2와 3이다. 그런데 $(1+\cfrac{1}{a-1})(1+\cfrac{1}{b-1})(1+\cfrac{1}{c-1})$은 k보다 항상 큰 값이지만 분모의 값이 커지면 되려 1에 근접한 형태임을 알 수 있으므로 k가 적어도 2의 값을 가지기 위한 a값의 범위가 어떻게 되는지 검사해야 한다. 하나씩 대입했을 때 4부터 k<2가 되어 k가 어떠한 값도 가질 수 없음을 확인할 수 있고 이에 따라 $a<4$여야 주어진 조건에 모순되지 않고 해가 존재할 수 있음을 알 수 있다.

따라서 (a,k) 순서쌍은 (2,2), (2,3), (3,2)가 가능하다.

  • (a,k)=(2,2)이면 $2bc-1=2(b-1)(c-1)$이 되고 정리하면 2(b+c)=3의 결과를 얻어 자연수 해가 존재하지 않는다.
  • (a,k)=(2,3)이면 $3(b-1)(c-1)=2bc-1$이 되고 (b-3)(c-3)=5에서 b=4, c=8의 결과를 얻을 수 있다.
  • (a,k)=(3,2)이면 $2(b-1)(c-1)=3bc-1$이 되고 (b-4)(c-4)=11에서 b=5, c=15의 결과를 얻을 수 있다.

약수와 배수 문제 유형 4

예제

정수 m에 대해 $\frac{m^3+m+5}{m^2-m+1}$의 값이 정수가 되도록 하는 모든 m의 값을 구하여라.

주어진 식을 나누어 몫과 나머지로 구분하면 $m+1+\cfrac{m+4}{m^2-m+1}$이므로 주어진 식이 정수가 되려면 최소한 $m^2-m+1\le|m+4|$을 만족해야 한다. 우변에 절대값 기호가 있는데 x=-4를 기준으로 보다 작으면 -x-4가 되므로 대입하여 정리하면 $m^2\le-5$가 되어 모순이다. 따라서 해가 존재하더라도 x=-4보다 크기 때문에 그대로 계산하면 $m^2-2m-3\le0$이 되어 $(m+1)(m-3)\le0$으로 m의 해는 -1, 0, 1, 2, 3이고 추가로 주어진 식에서 m=-4인 경우 분수꼴이 0이 되어 정수가 되기 때문에 모든 m의 값은 -4, -1, 0, 1, 2 ,3이다.

작성에 도움이 된 자료

  • KMO 수학경시 정수론, 장환수학, 임장환 저

선형 디오판토스 방정식

간단히 말하면 부정방정식 중 정수해만을 구하는 방정식을 말한다. 디오판토스 방정식에는 여러 형태가 있지만 유클리드 호제법과 베주 항등식에 나오는 식과 유사한 ax+by=c를 선형 디오판토스 방정식(Linear Diophantine equation)이라 부른다. c=gcd(a,b)면 베주 항등식이 된다.

정리: $a,b \in N$이라고 하자. 그러면 $gcd(a,b)=ax+by$를 만족하는 정수 $x,y\in Z$가 존재한다.

베주 항등식의 해는 유일하지 않으며 확장된 유클리드 호제법으로 구할 수 있다.

해가 존재하는 지 증명

$S={ax+by\ |\ x,y\in Z}$라 정의하고 집합 S가 다음 세개의 성질을 만족함을 증명하자.

  1. $a,b\ \in S$

    $a=a\cdot1+b\cdot0\in S,\ b=a\cdot0+b\cdot1 \in S$

  2. $u \in S \implies u\cdot t \in S,\ \forall t\in Z$

    $u\in S$이면 $\exists\ x_1,y_1 \in Z\ s.t. u=ax_1+by_1$이며 $u \cdot t=t(ax_1+by_1)=a(tx_1)+b(ty_1)\in S$

  3. $u_1,u_2 \in S \implies u_1\pm u_2 \in S$

    $u_1,u_2 \in S$라 하면 $u_1=ax_1+by_1$, $u_2=ax_2+by_2$를 만족하는 정수 $x_1,x_2,y_1,y_2$가 존재한다.

    $u_1\pm u_2=ax_1+by_1 \pm\ (ax_2+by_2) = a(x_1\pm x_2)+b(y_1\pm y_2) \in S$

따라서 $a=bq+r,\ 0\le r<b$에 대하여 $a,b \in S$이므로 $a-bq=r\in S$이다. $r=0$인 경우 gcd(a,b)=b이고 $r\ne0$이면 $b=rq_1+r_1,\ 0\le r_1<r$로 표현할 수 있고 $b,r\in S$이므로 $r_1=b-rq_1$이 되어 S의 원소가 된다. 이를 마지막까지 반복하면 $r_n=gcd(a,b)\in S$가 되어 gcd(a,b)=ax+by를 만족하는 정수 x, y가 존재하며 유클리드 알고리즘의 증명도 할 수 있다.

선형 디오판토스 방정식의 일반해

그렇다면 베주 항등식이 아니라 선형 디오판토스 방정식 $ax+by=c$에 대해 (x,y)의 해를 구해보자. 이전 포스팅과 위에서 베주 항등식 $ax+by=gcd(a,b)=d$에 대해 성립하게 만드는 x, y가 반드시 존재하고 $ax+by$로 표현되는 모든 정수는 d의 배수임을 확인하였다.

즉, 앞서 베주 항등식을 토대로 $ax+by=c$의 해가 존재 유무와 c는 $gcd(a,b)$의 배수라는 조건은 서로 필요충분조건임을 확인하였다. 선형 디오판토스 방정식의 특수해가 존재하고 우변이 a와 b의 최대공약수의 배수임을 알아냈으니 일반해를 표현해보자.

(x,y)가 임의의 해라고 가정하면 $ax_0+by_0=ax+by$이고 이를 정리하면 $a(x-x_0)=-b(y-y_0)$이다. 여기서 양변을 $gcd(a,b)=d$로 나누면 $\cfrac{a}{d}(x-x_0)=-\cfrac{b}{d}(y-y_0)$인데 $gcd(\cfrac{a}{d},\cfrac{b}{d})=1$이므로 $\cfrac{a}{d}|y-y_0$이다. 따라서 적당한 정수 $k_x$에 대해 정리하면 $\cfrac{a}{d}k_x=-(y-y_0)$이고 정리하면 $y=y_0-\cfrac{a}{d}k_x$이다. 마찬가지로 x에 대해 정리하면 $x=x_0+\cfrac{b}{d}k_y$를 얻는다. 따라서 $d=gcd(a,b)$이므로 ax+by=c의 정수해 (x,y)는 특수해 $x_0,y_0$에 대해 $[(x_0+\cfrac{b}{d}k,y_0-\cfrac{a}{d}k),k\in Z]$로 표현할 수 있다.

확장 유클리드 호제법

확장 유클리드 호제법은 유클리드 호제법을 역으로 계산하여 $ax+by=c$를 만족하는 (x,y)쌍을 구하는 알고리즘이다.

먼저 x,y의 점화식을 도출하기 위해 이전의 유클리드 호제법 과정을 다시 작성해보자.

$a=bq+r_2$

$b=r_2q_2+r_3$

$r_2=r_3q_3+r_4$

$\cdots$

$r_n=r_{n+1}q_{n+2}$와 같이 전개가 되어 결국 마지막에 남는 값이 최대공약수가 되고 이것을 참고하면 아래와 같은 조건이 생긴다.

$r_{n+2}=r_n-r_{n+1}q_{n+2},\ ax_n+by_n=r_n$

$=ax_n+by_n-(ax_{n+1}+by_{n+1})q_{n+2}$

$=a(x_n-x_{n+1}q_{n+2})+b(y_n-y_{n+1}q_{n+2})$

$\implies (x_{n+2},y_{n+2})=(x_n-x_{n+1}q_{n+2},y_n-y_{n+1}q_{n+2})$

위와 같이 점화식을 도출하였고 유클리드 호제법의 결과에 따라 $gcd(a,b)=r_{n+2}$라 하자. 그리고 점화식의 초항이 필요한데 유클리드 호제법의 전개식을 보면 a와 b에 대해서도 r과 같이 해석할 수 있으므로 $r_0=a,\ r_1=b$라 하면 $a=ax_0+by_0$에서 $(x_0,y_0)=(1,0)$이고 $b=ax_1+by_1$에서 $(x_1,y_1)=(0,1)$이다. x, y에 대해 점화식과 초항을 구하였으므로 차례대로 계산하면 된다. 아래 예시를 구해보자.

예제

두 수 710, 68의 최대공약수를 구하고 $gcd(710,68)=710x+68y$를 만족하는 정수 x, y를 구하여라.

유클리드 호제법을 사용하면 gcd(710,68)은 금방 아래와 같이 구할 수 있다.

$710=68\cdot10+30$

$68=30\cdot2+8$

$30=8\cdot3+6$

$8=6\cdot1+2$

$6=2\cdot3$으로 $gcd(710,68)=2$를 구하였다.

이제 이걸 다시 역산하면 x, y값이 아래와 같이 나온다.

$2=8-6 \qquad \Longleftarrow 2=8-6$

$=4\cdot8-30 \quad \Longleftarrow 6=30-8\cdot3$

$=68\cdot4-30\cdot9 \quad \Longleftarrow 8=68-30\cdot2$

$=710\cdot(-9)+68\cdot94 \quad \Longleftarrow 30=710-68\cdot10$

$\therefore x=-9,\ y=94$

정수해가 구해졌으므로 위의 베주항등식의 일반해에 대입하면 다른 해를 구할 수 있다. 위에서 구한 일반해에 대입하면 (x,y)는 각각 $(-9+\cfrac{68}{2}k,94-\cfrac{710}{2}k)$로 k가 어떤 정수건 다른 해를 만들 수 있다. 예를 들어 1을 대입 시 (25,-261)이 나오는데 문제에 제시된 수식에 대입하면 $710\cdot25+68\cdot(-261)=2$가 성립한다.

정리: $a,b\in N$에 대하여, $gcd(a,b)=1$과 $\exists x,y\in Z\quad s.t.\ ax+by=1$은 필요충분관계이다.

앞서 베주 항등식을 통해 증명하였으므로 생략하겠다.

정리: $ax+by=1$이면 $gcd(a,b)=gcd(a,y)=gcd(x,b)=gcd(x,y)=1$이 성립한다.

정수해를 갖는 조건이라면 베주 항등식에 따라 우변은 gcd(a,b)의 배수여야 하므로 gcd(a,b)=1이다. 그리고 a, b와 똑같은 관점으로 다른 미지수에도 적용 가능하므로 제시된 조건을 만족한다.

정리: $a,b\in N$에 대해 $gcd(a,b)=d\Rightarrow gcd(\cfrac{a}{d},\cfrac{b}{d})=1$

정리: $a,m,n\in N$라 하면, $gcd(a,mn)=1 \iff gcd(a,m)=1$이고 $gcd(a,n)=1$이다.

필요충분조건임을 증명하기 위해 제시된 명제와 그 역이 성립함을 증명하자.

$gcd(a,mn)=1$일 때 $ax+mny=1$을 만족하는 정수 x, y가 존재한다. $a(x)+m(ny)=1$로 보면 $gcd(a,m)=1$이며 $a(x)+n(my)=1$로 보면 $gcd(a,n)=1$이다.

역으로 $gcd(a,m)=gcd(a,n)=1$이라 하자. 그럼 $ax_0+my_0=1$과 $ax_1+ny_1=1$을 만족시키는 정수 $x_0,x_1,y_0,y_1$이 존재한다.

$1=ax_0+my_0(ax_1+ny_1)=ax_0+amx_1y_0+mny_0y_1$

$=a(x_0+mx_1y_0)+mn(y_0y_1)=1$

$\therefore gcd(a,mn)=1$

정리: $a,b,S\in N$이라 하자. $a|S$, $b|S$, $gcd(a,b)=1$이면 $ab|S$이다.

$a|S,\ b|S$에 따라 적당한 정수 x, y에 대해 $ax=by=S$이다. 그렇다면 $a|by$가 성립하고 gcd(a,b)=1에 따라 $a|y$이다. 그리고 적당한 정수 z가 존재하여 $az=y$이고 $S=b\cdot az=abz$가 되어 $ab|S$를 만족한다.

작성에 도움이 된 자료

  • KMO 수학경시 정수론, 장환수학, 임장환 저


+ Recent posts