跳到主要内容
CalcMax

杨辉三角计算器

范围:1 – 53

结果

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, 6, 15, 20, 15, 6, 1
行和
64

杨辉三角是一个用加法铺出来的三角形:每一行的两端都是 1,中间每一个数都等于它上面相邻两个数之和。第一行只有 1;第二行是 1 和 1;第三行是 1、2、1,那个 2 就是上面两个 1 相加;再往下是 1、3、3、1 与 1、4、6、4、1。它在中文文献里的名字来自南宋杨辉 1261 年写的《详解九章算法》,书中把它记作「开方作法本源」图,并注明引自北宋贾宪的著作,比欧洲的帕斯卡早约四百年;同一张表在西方叫帕斯卡三角。三角形里的数就是二项式系数,也就是把 (x + y) 展开成 n 次方之后各项的系数,所以第 2 行是 1、2、1,展开出来正是 x² + 2xy + y²。另外两件事也从这个三角形里掉出来:任何一行的和都是 2 的幂——1、2、4、8、16——因为每一行都是把上一行错开一位再加一遍,等于把上一行的总和数了两次;而沿斜对角线读下去得到的是斐波那契数列。本页把整块三角按你要的行数印出来,再把最后一行单独印一遍,省得你在长长一串数字里找它,行和也单独给一格。行号从 0 起算,所以填 7 得到的是第 0 到第 6 行,末尾一行是 1、6、15、20、15、6、1。

前 7 行,旁边是每一行的和

行号各项系数行和
011
11, 12
21, 2, 14
31, 3, 3, 18
41, 4, 6, 4, 116
51, 5, 10, 10, 5, 132
61, 6, 15, 20, 15, 6, 164

先看行和那一列:1、2、4、8、16、32、64。每一行都是上一行的两倍,这件事值得弄明白而不是背下来。铺一行的做法是拿上一行、错开一位再加到它自己身上,于是上一行的总和被数了两次——一次从左边缘进、一次从右边缘进。两侧的边永远不变也是同一个道理:边缘那个数上面只有一个邻居,所以它只可能继承一个 1。再拿系数那一列自己对着读。第 3 行是 1、3、3、1,第 4 行是 1、4、6、4、1,每个数都是上面两个数之和;每一行都对称,因为「取哪些」与「留下哪些」是同一个选择的两种说法。表里最后一行是第 6 行,也正是默认输入印出来的末行,所以这张表与上面的结果面板指的是同一批数。

公式

C(n, k) = C(n-1, k-1) + C(n-1, k);C(n, 0) = C(n, n) = 1;行和 = 2^n

n
要印多少行,最上面那个孤零零的 1 算第 0 行。所以填 n 得到的是第 0 到第 n − 1 行,最后印出来的那一行有 n 个数。输入范围是 1 到 53,而上界与屏幕放不放得下无关——真正先撑不住的是下面那条行和
k
一行里的位置,最左边算第 0 位。第 n 行有 k 从 0 到 n 共 n + 1 个数。两端是特殊的:C(n, 0) 与 C(n, n) 都是 1,这就是三角形两条边上那一列 1 的来源;严格夹在两端之间的每一个数,都等于上一行的两个数之和
C(n-1, k-1) + C(n-1, k)
铺出整张表的规则,也是页面实际在跑的那条。第 n 行第 k 个数等于它上方左右两个数之和——正因为如此,两条边只会看到一个数,于是永远停在 1。这里用加法而不是阶乘公式,所以每一个中间值都是精确的,屏幕上那块三角逐字就是页面做过的那串加法
C(n, k) = n! / (k! (n-k)!)
同一个数的另一张脸:二项式系数,也就是从 n 个里取 k 个、不计顺序的取法数。它与加法规则给出同样的值,也是这些数在用来计数而不是用来展开时的含义。页面不用它来算,因为那样一来页面就同时存在两套算术,而两套是会漂移的
2^n
第 n 行的行和,也是输入停在那里的原因。把任意一行加起来总是 2 的幂:第 0 行是 1,第 1 行是 2,第 2 行是 4,第 6 行是 64。每行翻一倍,所以它比单个系数更早冲出「能精确表示」的范围——第 52 行的和是 4503599627370496,第 53 行是 9007199254740992,比双精度能精确表示的最后一个整数大一
1, 6, 15, 20, 15, 6, 1
第 6 行写出来的样子,也是默认七行里最后印出的那一行。把它对着上一行读,每个数都是两个邻居之和:6 来自 1 + 5,15 来自 5 + 10,20 来自 10 + 10,然后左右对称。每一行都关于中间对称,永远如此,因为「留下 k 个」与「丢掉 n − k 个」是同一个选择数了两遍

手算二项式展开是它最直接的用处。要把 (x + y) 的六次方乘开,直接把第 6 行照抄下来,写成 1x⁶ + 6x⁵y + 15x⁴y² + 20x³y³ + 15x²y⁴ + 6xy⁵ + 1y⁶,一次多项式乘法都不用做。只要其中一个系数的话,组合数计算器直接从 n 与 k 算出来,不必把中间那些行铺开。两个结果的概率题用的是同一批数:抛十次硬币恰好出现四次正面的概率是 C(10, 4) 除以 2 的十次方,而分母那个 1024 正是第 10 行的行和。三角形还回答一些看起来不相干的技术问题——网格上从一角走到对角、只能向右或向下时的路径条数,以及「给定大小的子集有多少个」。当问题要的是「这些数是什么」,留在这一页;当问题要的是「有多少种可能」,组合数那一页更短;而当你想追的是藏在斜对角线里的那串数,斐波那契计算器直接讲那个数列。

算例

  1. 七行,末行是 1、6、15、20、15、6、1

    1. 第 0 行是 1,第 1 行是 1、1——每一行的两端永远是 1
    2. 第 2 行:中间那个 1 + 1 = 2,得到 1、2、1
    3. 第 3 行:两次 1 + 2 = 3,得到 1、3、3、1;第 4 行:1 + 3 = 4、3 + 3 = 6,得到 1、4、6、4、1
    4. 第 5、6 行照同样的做法往下铺,末行是 1、6、15、20、15、6、1
    5. 把第 6 行加起来:1 + 6 + 15 + 20 + 15 + 6 + 1 = 64,正是 2 的六次方

    默认输入。有两处值得对着屏幕核一遍。第一,每个数都是上面两个数之和:15 来自 5 + 10,20 来自 10 + 10,而这一行左右对称,因为七个数的正中间是 20,它两边成对。第二,行和每一次都翻倍——1、2、4、8、16、32、64——所以记得上一行是 32 的人不用加就能报出这一行。翻倍与两条边上的 1 是同一件事:上一行的总和被数了两次,一次从左半边进、一次从右半边进。

  2. 四行,最短的完整三角

    1. 第 0 行是 1;第 1 行是 1、1
    2. 第 2 行是 1、2、1,那个 2 来自 1 + 1
    3. 第 3 行是 1、3、3、1,两个 3 都来自 1 + 2
    4. 把末行加起来:1 + 3 + 3 + 1 = 8,是 2 的三次方

    这里的末行是第 3 行,也正是三角形开始有意思的地方:1、3、3、1 就是 (x + y)³ 的系数,所以 x³ + 3x²y + 3xy² + y³ 可以直接照抄这一行写出来,一次乘法都不用做。它也是短到能在几秒内手工核对完的最后一行,长的那几行之前先看它一眼是值得的。注意填 4 得到的是第 0 到第 3 行——你填的是行数,不是最大那一行的行号。

  3. 一行,最短的情形

    1. 第 0 行只有一个 1,它上面没有可加的东西
    2. 要一行就印一行
    3. 行和是 1,也就是 2 的零次方

    页面接受的最小输入,而它是被当成一个正常的三角形接受的,不是「空」。只有一行的三角形并不退化,它是后面每一行的出发点。看这一格还顺带确认了行号的起算方式:填 1 得到的是第 0 行而不是第 1 行,这一点等你把三角形对着二项式展开核的时候就会要紧。行和是 1 而不是 0,与「顶上那个数是 1」说的是同一件事。

局限

行数必须是 1 到 53 之间的整数。上界在那里是因为印出去的每个数都得是机器还能精确表示的整数,越过那条线之后相邻两个整数会塌成同一个值——印出来的数字看起来毫无异常,只是它已经不代表原来那个数了。先撑不住的是行和:第 52 行的和是 4503599627370496,第 53 行是 9007199254740992,比双精度能精确表示的最大整数大一。单个系数其实能撑到第 56 行——第一个越界的是第 57 行的 C(57, 28)——但三角是一行一行印的,所以由行和说了算。0 行会被拒绝:空三角什么都印不出来,没有答案可给。小数行数一律拒绝而不是四舍五入,因为没有「两行半」。每一行印成用逗号隔开的一串数,行与行之间用分号,数字之间不插千位分隔符,所以一个大的系数印成 184756 而不是 184,756;行数一多就是一长条需要横向滚动的数字。下面那张参考表固定印前 7 行,不跟着你的输入走,而且页面只能从顶上往下铺——没法只要求某一行。

常见问题

杨辉三角有什么用?
最主要的用处是展开二项式。第 n 行的数就是把 (x + y) 乘开 n 次之后各项的系数,所以第 6 行让你可以直接写出 (x + y)⁶ 的七项,中间一次多项式乘法都不用做。同一批数还用来数组合:C(n, k) 就是第 n 行第 k 个数,于是它们回答「从 10 个人里选 4 个有多少种选法」这类问题。概率里也常见,抛十次硬币恰好四次正面的概率是 C(10, 4) 除以 2¹⁰,而那个 1024 正是第 10 行的和。数网格路径也用它:从一个角走到对角、只能向右或向下时,路线条数就是三角里的某个数。
为什么行数最多只能填 53?
因为行和会先冲出「机器能精确表示的整数」这个范围。第 52 行的和是 4503599627370496,第 53 行是 9007199254740992,而后者比双精度能精确表示的最大整数大一。越过这条线之后相邻两个整数会变成同一个值,于是印出来的数字看着正常,却已经不代表它声称的那个数了。单个系数其实更耐用——第一个越界的是第 57 行里的 C(57, 28)——但三角是一行一行印的,所以由行和说了算。印出一行「总和是错的、单个数是对的」的数字,是没法发布的东西。
最后一行为什么要印两遍?
因为在大的三角上,绝大多数人只要最后那一行,而在一长串数字里把它找出来是件费劲的事。填 40 行,三角那一格就是一面数字墙,你要的那一行在最右边;末行那一格把同一行单独放在一处,大小读得下去。两格来自同一次计算,所以不可能对不上。行和印第三遍也是同一个理由——它是一个数,一眼就能回答那串数字一眼答不上来的问题。
行号是从 0 开始还是从 1 开始?
从 0 开始,这是二项式系数惯用的编号方式。C(n, k) 指的是第 n 行第 k 个数,所以最上面那个单独的 1 是第 0 行,填 7 得到的是第 0 到第 6 行,末行是 1、6、15、20、15、6、1——七个数,因为第 n 行永远有 n + 1 个数。这一点在你把三角形对着二项式展开核的时候很要紧:(x + y)⁶ 的系数那一行是第 6 行,不是第 7 行。你填的是行数,不是最大那一行的行号。
一行的和为什么永远是 2 的幂?
把任意一行加起来都等于 2 的行号次方:第 0 行是 1,第 6 行是 64,第 10 行是 1024。原因就在铺行的规则里。每一行都是上一行错开一位加到自己身上得到的,于是上一行的每一个数在这一行里都被数了两次——左边一次、右边一次。总和每次都翻倍,得到的自然就是 2 的幂。同一件事换一种读法:第 n 行的和数的是一个 n 元集合的全部子集,而 n 个元素的集合有 2ⁿ 个子集。抛十次硬币那个 1024 就是从第 10 行直接出来的。
斐波那契数列跟这个三角形有什么关系?
藏在对角线里。沿着一条向左上斜的线把数加起来——比如 1、再 4、再 3——累加的结果是 1、1、2、3、5、8、13,也就是斐波那契数列,每一项是前两项之和。原因在于斜线上的每个数本身也是上面两个数之和,而那两个数里有一个落在同一条斜线上、另一个落在旁边一条上,于是斜线直接继承了斐波那契的递推。想接着往下看那个数列,斐波那契计算器那一页专门讲它。

参考资料

相关计算器