【杨辉三角形】
《永乐大典》一页：杨辉引用贾宪《释锁算书》中的贾宪三角形
杨辉-{}-三角形，又称帕斯-{}-卡三角形、贾宪三角形、海亚姆三角形、巴斯-{}-卡三角形，是二项式系数的一种写法，形似三角形，在中国首现于南宋杨辉的《详解九章算法》得名，其在书中说明是引自贾宪的《释锁算书》，故又名贾宪三角形。前 9 行写出来如下：
杨辉三角形第  层（顶层称第 0 层，第 1 行，第  层即第  行，此处  为包含 0 在内的自然数）正好对应于二项式  展开的系数。例如第二层 1 2 1 是幂指数为 2 的二项式  展开形式  的系数。
== 性质 ==
每个数是它左上方和右上方的数的和
各条线穿过的数之和均为斐波那契数
用杨辉三角形做成的谢尔宾斯基三角形
# 杨辉三角形以正整数构成，数字左右对称，每行由1开始逐渐变大，然后变小，回到1。
# 杨辉三角形每一行的平方和在杨辉三角出现奇数次。
# 杨辉三角形第2的幂行所有数都是奇数，此为卢卡斯定理的特殊情况。
# 第  行的数字个数为  个。
# 第  行的第  个数字为组合数 。
# 第  行数字和为 ，因为第  行是  的二项展开。
# 第  行的数字按顺序写下所形成的数字为 ，因为该数字是  的二项展开。例如第二行  ，第三行 ，第四行 ，第五行 ，第六行 （第六行之后需进位）。该规律可推广至任何进位制，例如在九进制下：，。
# 除每行最左侧与最右侧的数字以外，每个数字等于它的左上方与右上方两个数字之和（也就是说，第  行第  个数字等于第  行的第  个数字与第  个数字的和）。这是因为有组合恒等式：。可用此性质写出整个杨辉三角形。
# 如果  为质数，则第  行的数中除了两端的1以外均为  的整数倍数。若  为合数则不然。
# 按照该三角形的斜边以及与之平行的斜线上的数所形成的数列为第  维度的单纯形数。即第一列全为1（0维），第二列为自然数形成的数列，第三列为三角形数形成的数列，第四列为四面体数形成的数列，第五列为五胞体数形成的数列，以此类推。
# 第  行（第  层）的所有的数的平方和为第  行（第  层）正中央的数字。可用该式得出 。例如第五行（第四层）所有的数的平方和  是第九行（第八层）正中央的数字。
# 将三角形左端对齐之后，沿右斜45度的对角线方向（不改变三角形形状的话则需要按照中国象棋的马的走法）取得的数之和为斐波那契数。
# 将第奇数行正中央的数减去其左侧（或右侧）第二个数，得到的差为卡塔兰数。
# 将杨辉三角形中所有的奇数与所有的偶数以不同颜色涂色的话，可以形成一个类似谢尔宾斯基三角形的图形。
== 历史 ==
印度手稿中使用的 Meru Prastaara (मेरु प्रस्तार)，源自宾伽罗 的公式。拉古纳特图书馆J&K手稿；公元755年
朱世杰《四元玉鉴》中的「古法七乘方图」
波斯数学家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
=== Java ===
public class TriangleArray
{
public static void main(String args)
{
final int NMAX = 10;
// allocate triangular array
int odds = new intNMAX + 1;
for (int n = 0; n
=== 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(Li + Li+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
using namespace std;
int P(int n){
int a=1, i=1;
while(i