Loading [MathJax]/jax/output/CommonHTML/jax.js

나눗셈 알고리즘(Division Algorithm)

aZ, bN이면 a=bq+r, 0r<|b|를 만족시키는 정수 q와 r이 유일하게 존재한다.

b가 0이 아닌 정수인 경우에도 성립하지만 0이면 a=r이고 자연수인 경우가 증명되면 음수는 부호만 바꾸면 되므로 생략한다.

이 알고리즘을 사용하기 전에 정수 q와 r이 존재하는지와 그 값들이 유일한지에 대해 증명해야 한다.

집합 S에 대해 S=atbtZ,atb0이라고 정의하자. b는 자연수이므로 |b|1,|a|b|a|가 성립하고 t=|a|를 집합 S에 대입하여 a(|a|b)=a+|a|ba+|a|0이므로 atb0을 만족하는 정수 t가 하나라도 존재하므로 집합 S는 공집합이 아니다. 그리고 정의에 따라 적어도 S는 N0의 부분집합임을 확인할 수 있다. 그러므로 S는 정수 0을 포함한 자연수의 집합이므로 최소원소를 가지며 그 값을 r이라고 하면 aqb=r을 만족시키는 적당한 정수 q가 존재함을 알 수 있고 r0을 만족함이 증명된다.

r<b를 증명할 땐 결론을 부정하여 rb라고 가정하자. 가정에 따라 rb=aqbb=a(q+1)b0이 되고 집합 S의 정의에 따라 a(q+1)bS이다. 그런데 rb<r이므로 r이 최소원소라는 앞서 확인한 내용에 모순된다. 따라서 처음 결론을 부정한 결과가 모순임이 확인되었으므로 r < b임이 확인되어 0r<b가 성립한다.

a=bq+r(0r<b)를 만족하는 정수 q와 r이 존재함을 증명하였다. 이 정수들의 유일성을 증명하기 위해 정수 q1,q20r1,r2<b를 만족하는 정수 r1,r2에 대해 a=bq1+r1=bq2+r2를 만족한다고 하자. 정수 q와 r에 대해 정리하면 b(q1q2)=r2r1이 되고 이 때 r2r1의 범위는 b<r2r1<b이다. (∵ 0r1,r2<b이기 때문)

b(q1q2)에 대해 b는 자연수이므로 최소정리(b1)에 따라 1<q1q2<1가 되고 q1,q2는 정수이므로 부등식이 성립하기 위해선 q1q2=0이어야 하며 그와 함께 r1=r2도 만족한다. 따라서, a=bq+r(0r<b)를 만족시키는 정수 q,r은 유일하게 존재한다.

유클리드 호제법(Euclidean Algorithm)

gcd(a,b)=gcd(b,r)==gcd(rn1,rn)=rn

참고정리. 정수 a, b, q, r이 a=bq+r를 만족한다고 하자. 그러면 gcd(a,b)=gcd(b,r)이 성립한다.

d1=gcd(a,b),d2=gcd(b,r)이라고 하자.

  1. d1|a,d1|bd1|bq+r, d1|bd1|r이므로 d1|d2

    d1이 r의 약수이므로 b와 r의 공약수가되는데 b와 r의 최대공약수는 d2이므로 d1d2의 약수이다.

  2. d2|b,d2|rd2|b, d2|abqd2|a이므로 d2|d1

    d2가 a의 약수이므로 a와 b의 공약수가 되는데 a와 b의 최대공약수는 d1이므로 d2d1의 약수이다.

서로 약수와 배수관계이므로 d1=d2이며 따라서 gcd(a,b)=gcd(b,r)이 성립한다.

참고정리를 증명하였으므로 이를 활용하여 유클리드 호제법을 증명하자.

a,bZ라 하면 나눗셈 알고리즘에 의해 a=bq+r,(0r<b)를 만족하는 정수 q,r이 유일하게 존재한다.

만약 r=0이면 gcd(a,b)=b가 되고 r0이면 b=rq1+r1,(0r1<r)을 만족하는 정수 q1,r1이 유일하게 존재한다. 그리고 앞에서 말한 것과 비슷하게 r1=0이면 gcd(a,b)=gcd(b,r)=r을 만족한다.

만약 n번째에 이를 때까지 0이 되지 않으면 밑의 식처럼 일반식으로 나타낼 수 있다.

r=r1q2+r2,(0r2<r1)

rn1=rnqn+1

결론적으로 gcd(a,b)=gcd(b,r)==gcd(rn1,rn)=rn이 된다.

다항식이나 큰 수의 최대공약수를 구하는데 유클리드 호제법이 자주 사용된다.

정리: 최대공약수의 연산법칙

a,b,qZ이라고 하면 다음의 성질들이 성립한다.

  1. gcd(a,b)=gcd(b,a)

  2. gcd(a,b)=gcd(a,b±qa)

    d1=gcd(a,b), d2=gcd(a,b±qa)라 하자

    • d1|a, d1|bd1|b±qa, d1|a인데 gcd(a,b±qa)=d2이므로 d1|d2
    • d2|a, d2|b±qad2|a, d2|b인데 gcd(a,b)=d1이므로 d2|d1

    따라서 d1=d2이므로 gcd(a,b)=gcd(a,b±qa)이다.

  3. gcd(a,1)=1

  4. gcd(a,b)=gcd(ac,b) 단, gcd(c,b)=1

    gcd(a,b)=d1, gcd(ac,b)=d2라 하자

    • d1|a, d1|bd1|ac, d1|b인데 gcd(ac,b)=d2이므로 d1|d2
    • d2|ac, d2|bgcd(b,c)=1이므로 d2|a, d2|b에 따라 d2|d1

    따라서 d1=d2이므로gcd(b,c)=1일 때 gcd(a,b)=gcd(ac,b)가 성립한다.

베주 항등식(Bezout's identity)

위의 최대공약수의 연산법칙 증명은 조금 부족한 느낌이 있다. 이 내용을 좀 더 엄격하게 증명해보려 찾아본 결과 베주 항등식에 대한 내용을 정리할 필요성을 찾았다.

적어도 둘 중 하나가 0이 아닌 정수 a, b가 있고 gcd(a,b)를 d라고 하자.

  1. d=ax+by를 성립하게 만드는 정수 x, y가 반드시 존재한다.
  2. d는 정수 x, y에 대하여 ax+by 형태로 표현할 수 있는 가장 작은 자연수이다.
  3. 정수 x, y에 대하여 ax+by로 표현되는 모든 정수는 d의 배수이다.

집합 S에 대해 S=m|m=ax+by>0,(x,yZ)라 정의하면 집합 S는 자연수의 부분집합이고 S가 공집합이 아님을 확인하면 자연수의 정렬성에 따라 최소원소를 가진다.

만약 a0일 때 |a|=a(±1)+b0S, a=0이면 b0으로 |b|S가 성립하여 집합 S는 최소한 |a|,|b| 중 하나는 원소로 가지므로 공집합이 아니기 때문에 ax+by꼴로 나타나는 값 중 최소값이 존재한다. 그 최소값을 d라 하고 d=ak+bl이라고 가정하자.

S의 임의의 원소 x에 대해 나눗셈 정리에 따라 x=qd+r(0r<d)가 성립함을 알 수 있다. 만약 3번을 부정하여 x가 d의 배수가 아니라고 해보자. 그러면 r0이므로 x는 자연수이다. 그리고 x는 집합 S의 원소이기 때문에 x=as+bt (s,tZ)로 표현할 수 있다. 앞에서 x=qd+r을 r에 대해 정리하면 r=xqd가 되는데 앞에서 x,d에 대해 ax+by꼴로 정했으므로 이를 대입해서 정리하면 다음과 같다.

xqd=as+btq(ak+bl)=a(sqk)+b(tql)S

즉, 위의 식에 따라 r도 S의 원소임을 확인하였지만 r은 x를 d로 나누었을 때의 나머지이므로 r<d이다. 그러나 d는 집합 S의 최소원소이므로 이에 모순되어 x는 d의 배수여야 한다. 그리고 x는 S의 임의의 원소라고 정의했으므로 집합 S의 모든 원소는 d의 배수이다.

문제에서 a,b 중 하나는 0이 아닌 정수일 때 |a|혹은 |b|를 원소로 갖는다고 했으므로 d는 a,b의 공약수이다. 물론 둘 중 하나가 0인 경우엔 0이 아닌 모든 수는 0의 약수이므로 모순되지 않는다. 그러나 아직 gcd(a,b)=d를 증명하지 않았다.

d가 최대공약수임을 증명하기 위해 새로운 임의의 공약수를 가정하자. 만약 e도 a,b의 공약수라고 두면 a=ae, b=be라고 표현할 수 있고 앞서 d=ak+bl=aek+bel로 표현할 수 있어 d는 e의 배수이다. 즉, 임의의 a와 b의 공약수는 모두 d의 약수이므로 gcd(a,b)=d가 성립한다.

베주 항등식을 이용한 최대공약수의 연산법칙 증명

  1. gcd(a,b)=gcd(a,b±qa)

    gcd(a,b)=d1, gcd(a,b±qa)=d2라 하면 베주 항등식에 따라 d1|b±qa이고 d2가 최대공약수이므로 d1|d2이다. d2에 대해서도 d2|b±qaqa=b이고 gcd(a,b)=d1이므로 d1=d2

  2. gcd(a,b)=gcd(ac,b) 단, gcd(b,c)=1

    gcd(a,b)=d1, gcd(ac,b)=d2라 하고 베주 항등식에 따라 d1=ax1+by1, d2=acx2+by2인 정수 x1,y1,x2,y2가 존재한다고 하자. 그리고 gcd(b,c)=1에 따라 정수 x,y에 대해 cx+by=1이라고 가정한 뒤 양변에 d1을 곱하여 정리하면d1=d1cx+d1by이 된다. 우변의 x의 계수를 ac로 맞추기 위해 앞서 정의한 d1을 대입하면 (ax1+by1)cx+d1by=ac(x1x)+b(cy1x+d1y)=d1이 되어 d2|d1이 성립한다.

    마찬가지로 cx+by=1 양변에 d2를 곱하면 d2=cd2x+bd2y가 되고 앞서 했듯이 계수 ac를 만들기 위해 우변에 대입하면 c(acx2+by2)x+bd2y=d2이고 d1의 꼴로 바꾸면 a(c2x2x)+b(cxy2+d2y)=d2가 되어 d1|d2가 성립한다.

예제

n3+2nn4+3n2+1가 모든 정수 n에 대하여 기약분수임을 보여라.

유클리드 호제법 계산 1

gcd(1,n)=1이므로 gcd(n3+2n,n4+3n2+1)=1되어 서로소이므로 모든 정수 n에 대해 기약분수이다.

두 수 12378, 3054의 최대공약수를 구하여라.

유클리드 호제법 계산 2

위 그림에 따라 gcd(6,18)=6으로 12378과 3054의 최대공약수는 6이다.

aN일 때, gcd(a7+1,a3+1)=a+1임을 증명하라.

유클리드 호제법 계산 3

따라서, a7+1=(a4a)(a3+1)+(a+1)이고 a3+1=(a2a+1)(a+1)gcd(a7+1,a3+1)=a+1이다.

a=11,111,111과 b=11,111,...,111 (1이 2020개)의 최대공약수를 구하라.

예를 들어 k=1,111 ... 111,111 (1이 18개)를 a로 나눠보자. 그럼 k=102a(100+108(21))+11이 될 것이다. 즉 18=82+2이고 피제수와 몫 그리고 나머지를 각각 s, q, r이라 하면 k=10ra(1+10s++108(q1))+1111 (1이 r개) 꼴로 나타날 것이다.

마찬가지로 2020=8252+4이므로 b=104a(1++108251)+1111이 되어 gcd(a,b)=gcd(a,1111)이다. 즉 최대공약수는 1111이다.

n3+73n2+3n+1이 서로소가 아님을 만족하는 양의 정수 n 중 가장 작은 값을 구하여라.

gcd(n3+7,3n2+3n+1)=gcd(3n3+3n2+n(3n3+21),3n2+3n+1)

=gcd(3n2+n21,3n2+3n+1)=gcd(3n2+n21,3n2+3n+1(3n2+n21))

=gcd(3n2+n21,2n+22)=gcd(3n2+n213n(n+11),n+11)

=gcd((32n+21),n+11)=gcd(32n+21,32(n+11)(32n+21))

=gcd(32n+21,331)로 정리할 수 있는데 331은 소수이므로 양의 정수 n값이 존재하지 않는다. 그렇다면 그 이전으로 넘어가서 gcd(32n+21,n+11)의 경우 n+11=331을 만족하는 양의 정수 n값이 존재한다.

따라서, n3+73n2+3n+1이 서로소가 아님을 만족하는 가장 작은 양의 정수 n은 320이다.

520002499925, 5200224100025, 5200424100125의 최대공약수를 구하여라.

세 수의 최대공약수를 d라 하면 각각에 대해 da, db, dc로 표현할 수 있다. 그리고 gcd(da,db,dc)=gcd(d(cb),d(ba))이므로 대입하여 정리하면 gcd(52002(251)24,52000(251)24)이므로 24gcd(520021,520001)을 구하면 된다.

유클리드 호제법에 따라 gcd(5200215200025+25,520001)=gcd(520001,521)이고 두 제곱수의 차의 형태를 띠고 있으므로 좌항은 우항으로 인수분해가 된다. 따라서, gcd(520021,520001)=24이고 앞서 24를 따로 앞으로 옮겼기에 문제에서 제시된 세 수의 최대공약수는 242=576이다.

작성에 도움이 된 자료

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


+ Recent posts