ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Cantor Expression (칸터 표현)
    Number Theory 2017. 3. 23. 18:16

    1. 칸터 표현이란..


    기본적으로 10진수 8진수 등등과 달리 FACTORIAL을 이용해 수를 표현하는 것이다.


    어떤 10진수 x가 있다면 이 x는 다음과 같이 유일무이하게 표현할 수 있다.



    이를 10진수 2진수처럼 표현하기 위해 두가지를 증명해야한다.


    1. 모든 정수를 cantor expression으로 표현할 수 있다.

    2. 그 표현은 유일하다(unique)


    이 두가지 증명은 따로 하지 않겠다. ( 기존 진수 표현 증명과 비슷하다. )


    2. 칸터 표현 프로그램

    다음 프로그램은 정수를(10진수) 형태로 집어 넣으면 그 정수를 cantor 표현으로 바꿔주는 프로그램이다.


    예제 입력

    312

    예제 출력

    2*5! + 3*4! + 0*3! + 0*2! + 0*1!


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdio.h>
     
    //dec을 받아 expression 배열과 배열크기 반환
    int Cantor_Expansion(int dec, int *expression);
     
    int main()
    {
        int dec;
        int expression[1000];
        int n;
        int i;
     
        printf("<Make Cantor Expansion>\n");
        printf("Please Input Dec : ");
        scanf("%d", &dec);
        n = Cantor_Expansion(dec, expression);
     
        if (dec <= 0)
        {
            printf("Do not enter not positive integer!\n");
            return 0;
        }
     
        for (i = n; i >= 2; i--)
            printf("%d*%d! + ",expression[n-i],i);
     
        printf("%d*%d!\n", expression[n - i],i);
     
        return 0;
    }
    int Cantor_Expansion(int dec, int *expression)
    {
        int stack[1000];
        int top = 0;
        int i = 2;
     
        while (dec)
        {
            stack[top++] = dec % i;
            dec /= i++;
        }
        i = 0;
        while (top)
            expression[i++] = stack[--top];
        
        return i;
    }
     


Designed by Tistory.