杨辉三角形

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由2001:b400:e23b:ca25:5cc2:689b:f6f8:2b88留言2020年12月7日 (一) 07:46 →‎性質编辑。这可能和当前版本存在着巨大的差异。

永乐大典》一页:杨辉引用贾宪《释锁算书》中的贾宪三角形

杨辉三角形,又称帕斯卡三角形賈憲三角形海亚姆三角形巴斯卡三角形,是二项式系數的一种写法,形似三角形,在中国首现于南宋杨辉的《詳解九章算法》得名,书中杨辉说明是引自贾宪的《释锁算书》,故又名贾宪三角形。前 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.

外部連結

参见