가헌 삼각형(파스칼의 삼각형)과 이항정리

by gg582 · 2026-08-04 05:00:26 · 27 views

yanghui.webp

위 그림은 중세 수학자 양휘가 가헌 삼각형(파스칼의 삼각형)으로 작성한 이항정리표이다.

1행은 x이다.

2행은 x+1이다.

3행은 (x+1)^3이다.

4행은 (x+1)^4이다.

5행은 (x+1)^5이다.

...

N행은 (x+1)^N이다.

N=8일 때를 실제로 옮겨 쓰면 x^8+8x^7+28x^6+56x^5+70x^4+56x^3+28x^2+8x+1이다. 이는 실제 계산과 일치한다.

기본 조건을 다시 보며 (x+M)^N 꼴로 일반화한다. N=3은 충분히 작다.

(x+M)^N에서 M은 미지수 그대로 두고, N=3으로 한다. (x+M)(x+M)(x+M)=(x^2+2Mx+M^2)(x+M)으로 하자. 이 때 Y=(x^2+2Mx+M^2)로 한다.

Y(x+M)=xY+MY=(x^3+2Mx^2+M^2x)+(Mx^2+2M^2x+M^3)=x^3+3Mx^2+3M^2x+M^3이다.

이와 같이 N이 주어질 때 x^NM^N을 제외하고는 규칙적으로 Mx가 섞여 쓰이니 이치가 신기하다.

이대로 (x+M)^N 꼴의 가헌 삼각형(파스칼의 삼각형)을 아스키 아트로 출력하게 만들어 보자.

def generate_jiaxian_triangle(max_n):
    for n in range(max_n + 1):
        # n번째 행의 이항계수 계산 (C(n, k) * M^k 형태의 계수)
        row_coeffs = []
        c = 1
        for k in range(n + 1):
            row_coeffs.append(c)
            c = c * (n - k) // (k + 1)
        
        # 계수 표현 생성 (M의 거듭제곱 표시 포함)
        row_terms = []
        for k, coeff in enumerate(row_coeffs):
            if k == 0:
                term = "1"
            elif k == 1:
                term = f"{coeff}M" if coeff != 1 else "M"
            else:
                term = f"{coeff}M^{k}" if coeff != 1 else f"M^{k}"
            row_terms.append(term)
        
        # 삼각 형태로 출력하기 위한 정렬
        line = "   ".join(row_terms)
        print(f"N={n:2d} | " + line.center(max_n * 12))

# 실행 (예: N=8까지 출력)
if __name__ == "__main__":
    N_MAX = 8
    generate_jiaxian_triangle(N_MAX)

N= 0 |                                           1                                           
N= 1 |                                        1     M                                        
N= 2 |                                    1     2M    M^2                                    
N= 3 |                                1     3M    3M^2   M^3                                 
N= 4 |                            1     4M    6M^2   4M^3   M^4                              
N= 5 |                        1     5M    10M^2  10M^3  5M^4   M^5                           
N= 6 |                    1     6M    15M^2  20M^3  15M^4  6M^5   M^6                        
N= 7 |                1     7M    21M^2  35M^3  35M^4  21M^5  7M^6   M^7                     
N= 8 |            1     8M    28M^2  56M^3  70M^4  56M^5  28M^6  8M^7   M^8  

이제 N_MAX=8 부분을 고쳐 보자. N_MAX=int(input()) 꼴로 간단하게 한다.

이후 12를 입력한다.

N= 0 |                                                                        1                                                                        
N= 1 |                                                                     1     M                                                                     
N= 2 |                                                                  1     2M    M^2                                                                
N= 3 |                                                              1     3M    3M^2   M^3                                                             
N= 4 |                                                           1     4M    6M^2   4M^3   M^4                                                         
N= 5 |                                                       1     5M    10M^2   10M^3   5M^4   M^5                                                    
N= 6 |                                                   1     6M    15M^2   20M^3   15M^4   6M^5   M^6                                                
N= 7 |                                               1     7M    21M^2   35M^3   35M^4   21M^5   7M^6   M^7                                            
N= 8 |                                           1     8M    28M^2   56M^3   70M^4   56M^5   28M^6   8M^7   M^8                                        
N= 9 |                                       1     9M    36M^2   84M^3   126M^4   126M^5   84M^6   36M^7   9M^8   M^9                                 
N=10 |                                   1     10M    45M^2   120M^3   210M^4   252M^5   210M^6   120M^7   45M^8   10M^9   M^10                        
N=11 |                               1     11M    55M^2   165M^3   330M^4   462M^5   462M^6   330M^7   165M^8   55M^9   11M^10   M^11                  
N=12 |                           1     12M    66M^2   220M^3   495M^4   792M^5   924M^6   792M^7   495M^8   220M^9   66M^10   12M^11   M^12 

이것은 (x+1)^N 꼴이다. 기본 꼴의 확장으로 양휘산법에서 소개한다.

가헌과 양휘가 일찍이 이항정리의 모든 이치를 파악하여 체계화해 둔 덕분에, 오늘날 우리도 이를 바탕으로 임의의 (x+M)^N에 대한 이항 정리 표를 쉽게 도출할 수 있다. 이처럼 완성된 계수 테이블을 미리 정의해 두고 조회하여 연산하면, 고차식 전개와 계산을 훨씬 효율적으로 처리할 수 있다.

Back

Comments

No comments yet.