杨辉三角形

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

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

性質 

 楊輝三角形以正整數構成，數字左右对称，每行由1开始逐渐变大，然后变小，回到1。
 楊輝三角形每一行的平方和在楊輝三角出現奇數次。
 楊輝三角形第2的冪行所有數都是奇數，此為盧卡斯定理的特殊情況。
 第  行的数字个数为  个。
 第  行的第  個數字為組合數 。
 第  行数字和为 ，因為第  行是  的二項展開。
 第  行的数字按順序寫下所形成的數字为 ，因為該數字是  的二項展開。例如第二行  ，第三行 ，第四行 ，第五行 ，第六行 （第六行之後需進位）。該規律可推廣至任何進位制，例如在九進制下：，。
 除每行最左側與最右側的數字以外，每个数字等于它的左上方與右上方两个数字之和（也就是說，第  行第  個數字等於第  行的第  個數字與第  個數字的和）。這是因为有組合恒等式：。可用此性质写出整个楊輝三角形。
 如果  為質數，則第  行的數中除了兩端的1以外均為  的整數倍數。若  為合數則不然。
 按照該三角形的斜邊以及與之平行的斜線上的數所形成的數列為第  維度的單純形數。即第一列全為1（0維），第二列為自然數形成的數列，第三列為三角形數形成的數列，第四列為四面體數形成的數列，第五列為五胞體數形成的數列，以此類推。
 第  行（第  層）的所有的數的平方和為第  行（第  層）正中央的數字。可用該式得出 。例如第五行（第四層）所有的數的平方和  是第九行（第八層）正中央的數字。
 將三角形左端對齊之後，沿右斜45度的對角線方向（不改變三角形形狀的話則需要按照中國象棋的馬的走法）取得的數之和為斐波那契數。
 將第奇數行正中央的數減去其左側（或右側）第二個數，得到的差為卡塔蘭數。
 將楊輝三角形中所有的奇數與所有的偶數以不同顏色塗色的話，可以形成一個類似謝爾賓斯基三角形的圖形。

歷史 

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

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

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

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

意大利人稱之為「塔塔利亞三角形」（Triangolo 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年）；清代孔广森《少广正负术》称之为“诸乘方乘率表”；焦循《加减乘除释》称之为“古开方本原图”；刘衡《筹表开诸乘方捷法》称之为“开方求廉率图”；项名达《象数一原》称之为“递加图”。伟烈亚力《数学启蒙》称之为“倍廉法表”；李善兰《垛积比类》称之为“三角垛表”。近代中算史家李俨称之为“巴斯噶三角形”，但根据《永乐大典》指出“巴斯噶三角形”最早由贾宪使用。。著名数学家华罗庚，在1956年写的一本通俗读物《从杨辉三角谈起》，将贾宪的《开方作法本源》称为“杨辉三角”，首次将“巴斯噶三角形”回归宋代数学家名下；此后的中学数学教科书和许多数学科普读物都跟随之。另一方面，专业的中国数学史著作，都用“贾宪三角”这个称呼。。

一個數在杨辉三角出現的次數 
由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）
 因為丟番圖方程有無窮個解，所以出現至少六次的數有無窮多個。
 其解答，是
 
 其中表示第個斐波那契數（）。
 3003是第一個出現八次的數。

编程语言实现

Julia 
# Julia Language
function triangles(Lines)

  # 楊輝三角形
  coef = 1

  for i in 0:Lines
    global coef
    for space in 1:Lines-i
      print(" ")
    end

    for j in 0:i
      if (j==0 || i==0)
        coef = 1
      else
        coef = Int(coef * (i-j+1)/j)
      end
      print(" ",coef," ")     # 每個數字後面加上空個以利間隔數字
    end
    println()
  end
end

# Main Code
triangles(9)

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 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++ 
//以下只有列出14行
#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;
	}
}

註釋

参考文献

外部連結 
 巴斯卡三角形

参见 

 贾宪、杨辉
 莱布尼茨三角形

组合数学
阶乘与二项式主题