자연수의 정의와 연산의 성질(1)에 이어지는 글 입니다.

자연수의 곱셈을 정의하는데 덧셈에서 했던것과 같은 방법[각주:1]으로 곱셈을 정의하도록 합시다.

<자연수간의 곱셈의 정의>
자연수 a,b에 대해서
(M1) a * 1 = a
(M2) a * b' = ( a * b ) + a

이 정의에 따라 2 * 3 을 계산해 보도록 합시다.

2 * 3 = 2 * 2'
 =( 2 * 2 )+ 2              (M2)
 =( 2 * 1') +2   
 =( ( 2 * 1 ) +2 ) +2     (M2)
 =(2+2)+2                  (M1)
 =6

이런 식으로 적용되게 됩니다.

그러면 곱셈에 대한 연산법칙들을 다루어볼 차례입니다.

<자연수의 곱셈에 대한 결합법칙>
모든 자연수 a,b,c에 대해서
a*(b*c)=(a*b)*c
가 성립한다.

<자연수의 곱셈에 대한 결합법칙>
모든 자연수 a,b에 대해서
a*b=b*a
가 성립한다.

<자연수의 곱셈의 덧셈 위로의 분배법칙>
모든 자연수 a,b,c에 대해서
a*(b+c) = (a*b) + (a*c)       (좌 분배법칙)
(a+b)*c = (a*c) + (b*c)       (우 분배법칙)
가 성립한다.

이 모든 것들은 수학적 귀납법으로 어렵지 않게 증명할 수 있습니다.
(절대 귀찮아서 안 올리는게 아님)





이로서 더하기와 곱하기를 덧셈에 대해서 모두 정의해 보았고 그에따른 우리가 자명하게 사용하던
연산법칙들을 증명을 해 보았습니다. 간단히 올려보려고 했는데 생각보다 길어졌네요.
  1. 그러니까 귀납적으로 정의를 하자는 것입니다. [본문으로]

'수학' 카테고리의 다른 글

헤론의 공식 기하적 증명  (0) 2010.07.04
코사인 제2법칙 기하적 증명  (2) 2010.07.04
자연수의 정의와 연산의 성질(1)  (5) 2010.06.18
몬티 홀 문제  (4) 2010.04.04
하트 방정식  (3) 2010.02.19
Posted by h-bar
:
자연수가 무엇일까? 우리는 자연스럽게 그 자연수라는 것을 쓰고 있는데,
과연  정의가 무엿인가에 대해서 이야기 해 보도록 합니다.

자연수는 다음과 같은 공리계로서 정의가 됩니다.[각주:1]

<자연수에 대한 공리계>
(N1) 1은 자연수이다.

(N2) 어떤 자연수도 그 다음의 자연수가 존재한다.
(이 글에서 자연수 a의 다음의 자연수를 a'으로 쓰기로 약속하자.)

(N3) 1은 어떤 자연수의 다음 수도 아니다.

(N4) 두 수의 다음의 수가 같기 위해서는 그 두수가 같은 것일 수밖에 없다.

(N5) 어떤 집합이 1을 포함하고
 어떤 자연수를 포함한다면 그 다음의 자연수도 포함한다고 하자.
그러면 그 어떤 집합을 '자연수집합'이라고 한다.

(N5)를 친숙한 수식으로 표현하면


이제
여기서 각각의 의미를 살펴봅시다.
 
(N1)은 자연수의 시작을 의미합니다. 1으로부터 자연수가 시작되지요.
(N2)는 모든 자연수의 그 다음수가 존재한다고 함으로써 자연수 집합이 1뿐만이 아님을 의미합니다.
(N3)은 그렇게 확장되어가던 자연수의 집합이 닫힌 고리모양을 하지 않도록 합니다.
(N4)는 자연수의 다음수가 같은 두 수의 존재성을 부정함으로써 자연수가 6자 모양의 구조를 하지 않도록 해 줍니다.
(N5)는 수학적 귀납법에 대한 공리로서 흔히 말하는 수학적 귀납법은 이 공리에 기초한 것입니다.

이와 같은 공리계로 본 자연수2는 1의 다음수오 정의될 수 있고. 3은 2의 다음수 즉 1의 다음수의 다음수로 정의할 수 있다. 이와같이 모든 자연수를 정의내릴 수 있습니다.

이때 이러한 자연수 집합이 여러개 존재하지 않을까 하는 물음이 제기될 수 있으나 이는 별 문제가 되지 않는다.
1에 대해서 정의한 N이라는 집합과 1*에 대해서 정의한 두 집합 간에 일대일 대응이 존재하여 1->1*, 2->2* ...등의
대응을 지어줄 수 있다는 것이 증명되어있으므로 어차피 두 집합은 대등한 것임을 알 수 있습니다.

그런데, 자연수를 이렇게 정의만하면 아무런 쓸모가 없지요.
자연수집합이 정의되었으니 그에따른 연산을 정의해 대수적인 구조를 구축해 봅시다.

자연수의 덧셈을 정의하려고 합니다. 그런데 사용할 수 있는 말이 그렇게 많지 않습니다.
우리는 위의 공리계를 채택함으로서 거기에 있는 용어들로 새로운 용어나 연산을 정의해야 합니다.[각주:2]
사용할 수 있는 개념들로는 '그 다음 수'와 '수학적 귀납법'이 있습니다.
수학적 귀납법을 이용해 덧셈을 귀납적으로 정의를 해 봅시다.

<자연수간의 덧셈의 정의>
(A1) a+1=a'
(A2) a+b'=(a+b)'

이 정의는 a+b를 a(의 다음수)를 b번 수행한 것임에서 착안한 것입니다.

A2로서 a+b의 뒤의 수대신에 그 보다 작은 수로 바꾸어 내려가면서 1까지 내려갈 수 있고 그때는 그 다음수로 하면 되므로 이 정의는 타당하다고 할 수 있습니다.

예를 들면 3+2를 이 정의에 따라 계산해 봅시다.

3+2 = 3+1'    (2의 정의)
 = (3+1)'     (A2)
 = 4'           (4의 정의)
 = 5            (5의 정의)

이로서 3+2를 계산 할 수 있습니다.

덧셈이 잘 정의되었으므로 이제 연산의 성질들[각주:3]에 대해서 알아보도록 합시다.

<덧셈의 결합법칙>
자연수 a,b,c에 대해서
a+(b+c)=(a+b)+c
가 성립한다.

이는 수학적 귀납법, 즉(N5)를 이용해 증명할 수 있습니다.
모든 c에 대해서 성립함을 보이기 위해 우선 c=1일때를 생각해 보자.
a+(b+1)=a+b'   (A1)
 =(a+b)'         (A2)
 =(a+b)+1       (A1)
따라서 a+(b+1) = (a+b)+1

이제 a+(b+c)=(a+b)+c가 성립한다고 가정하자.
그러면
a+(b+(c+1))=a+(b+c')   (A1)
 =a+(b+c)'                  (A2)
 =(a+(b+c))'               (A2)
 =((a+b)+c)'               (가정)
 =(a+b)+c'                 (A2)
 =(a+b)+(c+1)            (A1)
따라서 c+1(즉,c')도 결합 법칙을 만족한다. 따라서 (N5)에 의해서
이 명제를 참으로 하는 c들의 집합(진리집합)은 자연수집합과 같다.
따라서 일반적으로 모든 자연수 a,b,c에 대해서
a+(b+c)=(a+b)+c  ■

또 연산 법칙에는 교환법칙이 있을 수 있다.

<덧셈에 대한 교환법칙>
모든 자연수 a,b에 대해서
a+b=b+a

이 역시 수학적귀납법(N5)를 이용하면 쉽게 증명할 수 있습니다.

덧셈이 나왔는데 이제 곱셈의 차례이다. 곱셈은 다음에 포스팅 하기로 하고 이만 마치도록 하겠습니다.

PS. 괜한 귀찮음으로 블로깅 초반에는 경어체를 쓰지 않았는데요, 독자들에 대한 미안한 마음이 들기에 최근에 경어체를 쓰려고 '노력'하고 있습니다. 그런데 쓰다가 무의식결에 경어체와 평어가 섞여있을 수 있습니다.
  1. 이를 페아노의 공리계라고 합니다. [본문으로]
  2. 그렇지 않으면 순환논리에 빠지는 수가 있습니다. 이때 공리계에 정의된 용어를 정의가 필요엾는 용어라 하여 '무정의 용어'라고 합니다. [본문으로]
  3. 결합볍칙, 교환법칙을 이야기 할 수 있습니다. [본문으로]

'수학' 카테고리의 다른 글

헤론의 공식 기하적 증명  (0) 2010.07.04
코사인 제2법칙 기하적 증명  (2) 2010.07.04
자연수의 정의와 연산의 성질(2)  (0) 2010.06.24
몬티 홀 문제  (4) 2010.04.04
하트 방정식  (3) 2010.02.19
Posted by h-bar
:

인수분해 프로그램

2010. 6. 13. 16:38

심심해서 짜봤다..
뭐 고등학교와서 처음 C를 배우는 거라 익숙하지 않긴 해도
프로그래밍이란걸 공학용 계산기에서 처음 해봤던지라 알고리즘짜는건 어느정도 할 수 있다..
여튼 이게 아마 그나마 실용적인 내가 만든 첫 C 프로그램일 것이다.
*넣는 과정이 약간 어려웠다. 이거 어디다 넣어둬야 하는지가 어려웠어서..
만들어놓고 실행해 보니 그 속도에 놀랐다.
계산기에서 한참걸리는게 1초도 안되서 나온다는게..


#include<stdio.h>
#include<math.h>
void main(){
 int a,n=0,i,f=0;
 printf("a=");
 scanf("%d",&a);

 printf("\na=");
 if(a==1){
  printf("1\n");
  printf("FINISH\n");
 }

 if(a%2==0){
  f=1;
  while(a%2==0){
   a=a/2;
   n+=1;
  }
  printf("2^%d ",n);
  n=0;
 }

 for(i=3;i<=sqrt(a);i=i+2){
  if(a%i==0){
   n=0;
   while(a%i==0){
    a=a/i;
    n+=1;
   }
   if(f==0){
    printf("%d^%d ",i,n);
    f=1;
    n=0;
   }
   else{
    printf("* %d^%d ",i,n);
    n=0;
   }

  }
  if(a==1){
   break;
  }
 }
 if(a!=1){
  if(f==0){
   printf(" %d^1\n",a);
   printf("Finish\n");
  }
  else{
   printf("* %d^1\n",a);
   printf("Finish\n");
  }
 }
 else{
  printf("\nFinish");
 }
}

'C언어' 카테고리의 다른 글

곱하기 (100자리 자연수)  (2) 2010.11.24
난수발생 코드  (0) 2010.08.29
최대원소 찾기  (0) 2010.07.17
#include<stdio.h>  (0) 2010.06.13
Posted by h-bar
:

#include<stdio.h>

2010. 6. 13. 16:31

어지간한 프로그램을 짤 때에 가장 위에 쓰는 문구입니다.

그뜻은
#include : <>안의 파일을 여기에 포함시켜라
stdio.h : STanDard Input/Output . Header

표준 입출력 함수들을 모아 놓은 헤더파일입니다.

예를들어 printf()라던가 scanf()라던가 등등..

<stdio.h>말고도
<conio.h>, <math.h>, <time.h> 등등 많다고 합니다..

'C언어' 카테고리의 다른 글

곱하기 (100자리 자연수)  (2) 2010.11.24
난수발생 코드  (0) 2010.08.29
최대원소 찾기  (0) 2010.07.17
인수분해 프로그램  (8) 2010.06.13
Posted by h-bar
:

BLOG main image
by h-bar

공지사항

카테고리

안녕하세요 (55)
그냥... (25)
물리 (10)
수학 (10)
C언어 (5)
음악 (3)
퀴즈 (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :