杨辉三角形

杨辉三角形,又称帕斯卡三角形賈憲三角形海亚姆三角形巴斯卡三角形,是二项式系數的一种写法,形似三角形,在中国首现于南宋杨辉的《詳解九章算法》得名,书中杨辉说明是引自贾宪的《释锁算书》,故又名贾宪三角形。前 9 行写出来如下:

        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
   1 5 10 10 5 1
  1 6 15 20 15 6 1
 1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
永乐大典》一页:杨辉引用贾宪《释锁算书》中的贾宪三角形

杨辉三角形第 层(顶层称第 0 层,第 1 行,第 层即第 行,此处 为包含 0 在内的自然数)正好对应于二项式 展开的系数。例如第二层 1 2 1 是幂指数为 2 的二项式 展开形式 的系数。

性質

每個數是它左上方和右上方的數的和
  1. 巴斯卡三角以正整數構成,數字左右对称,每行由1开始逐渐变大,然后变小,回到1。
  2. 巴斯卡三角每一行的平方和在楊輝三角出現奇數次。
  3. 巴斯卡三角第2的冪行所有數都是奇數。
  4. 巴斯卡三角每一行的和是2的冪
  5. 行的数字个数为 个。
  6. 行的第 個數字為組合數
  7. 行数字和为
  8. 除每行最左側與最右側的數字以外,每个数字等于它的左上方與右上方两个数字之和(也就是說,第 行第 個數字等於第 行的第 個數字與第 個數字的和)。這是因为有組合恒等式:。可用此性质写出整个楊輝三角形。

歷史

朱世杰《四元玉鉴》中的「古法七乘方圖」

波斯數學家Al-Karaji和天文學家兼詩人欧玛尔·海亚姆(عمر خیام,Omar Khayyám)在10世紀都發現了這個三角形,而且還知道可以借助這個三角形找次根,和它跟二项式的關係。但他们的著作已不存。[1]

11世纪北宋数学家贾宪发明了贾宪三角,并发明了增乘方造表法,可以求任意高次方的展开式系数。贾宪还对贾宪三角表(古代称数字表为“立成”)的构造进行描述。[2]贾宪的三角表图和文字描写,仍保存在大英博物馆所藏《永乐大典》卷一万六千三百四十四。

13世纪中国南宋数学家杨辉在《详解九章算术》里解释这种形式的数表,并说明此表引自11世纪前半贾宪的《释锁算术》[3]

1303年元代数学家朱世杰在《四元玉鉴》卷首绘制《古法七乘方图》[4]

意大利人稱之為「塔塔利亞三角形」(lolis Lolisl LolislTriangolo di Tartaglia)以紀念在16世紀發現一元三次方程解的塔塔利亞

布萊士·帕斯卡的著作Traité du triangle arithmétique(1655年)介紹了這個三角形。帕斯卡搜集了幾個關於它的結果,並以此解決一些概率論上的問題,影响面广泛,Pierre Raymond de Montmort(1708年)和亞伯拉罕·棣莫弗(1730年)都用帕斯卡來稱呼這個三角形。

历史上曾经独立绘制过这种图表的数学家:

  • Karaji 和 Omar Khayyám 波斯 10世紀(图文无存)
  • 賈憲 中國北宋 11世纪 《释锁算术》 (图文现存大英博物馆所藏《永乐大典》)
  • 杨辉 中國南宋 1261《详解九章算法》记载之功(图文现存大英博物馆所藏《永乐大典》)
  • 朱世杰 中國元代 1299《四元玉鉴》级数求和公式
  • 阿尔·卡西 阿拉伯 1427《算术的钥匙》(现存图文)
  • 阿皮亚纳斯 德国 1527
  • 施蒂费尔 德国 1544《综合算术》二项式展开式系数
  • 薛贝尔 法国 1545
  • B·帕斯卡 法国 1654《论算术三角形》

中国数学家的研究

中国贾宪是贾宪三角的发明人,贾宪/杨辉称之为“释锁求廉本源”,朱世杰称之为“古法七乘方图”(1303年),明代数学家吴敬《九章详注比类算法大全》称之为“开方作法本源”(1450年);明王文素算学宝鉴》称之为“开方本源图”(1524年);明代程大位算法统宗》称之为“开方求廉率作法本源图”(1592年)。 清代梅文鼎《少广拾遗》称之为“七乘府算法”(1692年);清代孔广森《少广正负术》称之为“诸乘方乘率表”;焦循《加减乘除释》称之为“古开方本原图”;刘衡《筹表开诸乘方捷法》称之为“开方求廉率图”;项名达《象数一原》称之为“递加图”。伟烈亚力《数学启蒙》称之为“倍廉法表”;李善兰《垛积比类》称之为“三角垛表”。近代中算史家李俨称之为“巴斯噶三角形”,但根据《永乐大典》指出“巴斯噶三角形”最早由贾宪使用。[5]。著名数学家华罗庚,在1956年写的一本通俗读物《从杨辉三角谈起》[6],将贾宪的《开方作法本源》称为“杨辉三角”,首次将“巴斯噶三角形”回归宋代数学家名下;此后的中学数学教科书和许多数学科普读物都跟随之[7]。另一方面,专业的中国数学史著作,都用“贾宪三角”这个称呼。[8][9]

一個數在杨辉三角出現的次數

由1開始,正整數在楊輝三角形出現的次數為:,1, 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 2, 4, ... (OEIS:A003016)。最小而又大於1的數在賈憲三角形至少出現n次的數為2, 3, 6, 10, 120, 120, 3003, 3003, ... (OEIS:A062527

  • 除了1之外,所有正整數都出現有限次。
  • 只有2出現剛好一次。
  • 6,20,70等出現三次。
  • 出現兩次和四次的數很多。
  • 還未能找到出現剛好五次或七次的數。
  • 120,210,1540等出現剛好六次。(OEIS:A098565
    • 因為丟番圖方程

      有無窮個解[10],所以出現至少六次的數有無窮多個。
    • 其解答,是

    • 其中表示第個斐波那契數()。
  • 3003是第一個出現八次的數。

编程语言实现

Go

package main

import "fmt"

//行数
const LINES int = 10

//杨辉三角
func ShowYangHuiTriangle() {
	nums := []int{}
	for i := 0; i < LINES; i++ {
		//补空白
		for j := 0; j < (LINES - i); j++ {
			fmt.Print(" ")
		}

		for j := 0; j < (i + 1); j++ {
			var length = len(nums)
			var value int

			if j == 0 || j == i {
				value = 1
			} else {
				value = nums[length-i] + nums[length-i-1]
			}
			nums = append(nums, value)
			//每个数字后面加空格以间隔数字.
			fmt.Print(value, " ")
		}
		fmt.Println("")
	}
}
func main() {
	ShowYangHuiTriangle()
}

Java

public class TriangleArray
{
   public static void main(String[] args)
   {
      final int NMAX = 10; 
 
      // allocate triangular array
      int[][] odds = new int[NMAX + 1][];
      for (int n = 0; n <= NMAX; n++)
         odds[n] = new int[n + 1];  
 
      // fill triangular array
      for (int n = 0; n < odds.length; n++)
         for (int k = 0; k < odds[n].length; k++)
         {
            /*
             * compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k)
             */
            int lotteryOdds = 1;
            for (int i = 1; i <= k; i++)
               lotteryOdds = lotteryOdds * (n - i + 1) / i;
 
            odds[n][k] = lotteryOdds;
         }
 
      // print triangular array
      for (int[] row : odds)
      {
         for (int odd : row)
            System.out.printf("%4d", odd);
         System.out.println();
      }
   }
}

Python

代码量较少的实现方式如下:

# -*- coding: utf-8 -*-
#!/usr/bin/env python
def triangles():
    L = [1]
    while True:
        yield L
        L = [sum(i) for i in zip([0]+L, L+[0])]

下面是另一种较易理解的方式:

def triangles():
    L = [1]
    S = []
    while True:
        yield L 
        L = [1] + S + [1]
        S = []
        for i in range(len(L)-1):
            S.append(L[i] + L[i+1])

Visual Basic

Private Sub Form_Click()
    N = InputBox("", "", 5)
    ReDim a(N + 1, N + 1), b(N + 1, N + 1)
    Cls
    k = 8
    For I = 1 To N
        Print String((N - I) * k / 2 + 1, " ");
        For J = 1 To I
            a(I, 1) = 1
            a(I, I) = 1
            a(I + 1, J + 1) = a(I, J) + a(I, J + 1)
            b(I, J) = Trim(Str(a(I, J)))
            Print b(I, J); String(k - Len(b(I, J)), " ");
        Next J
        Print
    Next I
End Sub

C++

#include<iostream>
using namespace std;

int P(int n){
	int a=1,i=1;
	while(i<=n){
		a*=i;
		i++;
	}
	return a;
}

int C(int a,int b){
	return P(a)/(P(b)*P(a-b));
}

int main(){
	for(int i=1;i<14;i++){
		for(int j=1;j<=i;j++){
			cout << C(i-1,j-1) << " ";
		}
		cout << endl;
	}
}

参考文献

  1. Victor J. Katz, editor, The Mathematics of Egypt, Mesopotamia, China, India, and Islam, A Sourcebook. Page 518, Princeton University Press 2007.
  2. 郭书春著 《中国科学技术史·数学卷》第十五章 《唐中叶至元中叶熟悉概论》第357页 (贾宪)创造《开发作法本源》即贾宪三角 科学出版社 2010
  3. 永乐大典》卷一万六千三百四十四
  4. 朱世杰 原著 李兆华校证 《四元玉鉴校证》卷首《古法七乘方图》 第58页 科学出版社 2007 ISBN 978-7-03-020112-6
  5. 李俨 《中算家的巴斯噶三角形研究》《李俨.钱宝琮科学史全集》卷6,215-230页
  6. 华罗庚著 《从杨辉三角谈起》 《数学通报丛书》科学出版社 1956年10月
  7. 郭书春 《中国科学技术史·数学卷》422页 第十八章第二节 《贾宪三角》,科学出版社 2010
  8. 吴文俊主编 《中国数学史大系》第五卷 704页
  9. 郭书春 《中国科学技术史·数学卷》 第十八章第二节 《贾宪三角》,科学出版社 2010
  10. Singmaster, David, "Repeated Binomial Coefficients and Fibonacci numbers", Fibonacci Quarterly, volume 13, number 4, pages 296—298, 1975.

外部連結

参见

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.