楊輝三角形

楊輝-{}-三角形，又稱帕斯-{}-卡三角形、賈憲三角形、海亞姆三角形、巴斯-{}-卡三角形，是二項式系數的一種寫法，形似三角形，在中國首現於南宋楊輝的《詳解九章演算法》得名，其在書中說明是引自賈憲的《釋鎖算書》，故又名賈憲三角形。前 9 行寫出來如下：formula_1楊輝三角形第 formula_2 層正好對應於二項式 formula_6 展開的係數。例如第二層 1 2 1 是冪指數為 2 的二項式 formula_7 展開形式 formula_8 的係數。歷史.波斯數學家Al-Karaji和天文學家兼詩人歐瑪爾·海亞姆在10世紀都發現了這個三角形，而且還知道可以藉助這個三角形找formula_2次根，和它跟二項式的關係。但他們的著作已不存。11世紀北宋數學家賈憲發明了賈憲三角，併發明瞭增乘方造表法，可以求任意高次方的展開式係數。賈憲還對賈憲三角表的構造進行描述。賈憲的三角表圖和文字描寫，仍儲存在大英博物館所藏《永樂大典》卷一萬六千三百四十四。13世紀中國南宋數學家楊輝在《詳解九章算術》裡解釋這種形式的數表，並說明此表引自11世紀前半賈憲的《釋鎖算術》。1303年元代數學家朱世傑在《四元玉鑑》卷首繪製《古法七乘方圖》。義大利人稱之為「塔塔利亞三角形」以紀念在16世紀發現一元三次方程解的塔塔利亞。布萊士·帕斯卡的著作"Traité du triangle arithmétique"都用帕斯卡來稱呼這個三角形。歷史上曾經獨立繪製過這種圖表的數學家：中國數學家的研究.中國賈憲是賈憲三角的發明人，賈憲/楊輝稱之為“釋鎖求廉本源”，朱世傑稱之為“古法七乘方圖”。清代梅文鼎《少廣拾遺》稱之為“七乘府演算法”；清代孔廣森《少廣正負術》稱之為“諸乘方乘率表”；焦循《加減乘除釋》稱之為“古開方本原圖”；劉衡《籌表開諸乘方捷法》稱之為“開方求廉率圖”；項名達《象數一原》稱之為“遞加圖”。偉烈亞力《數學啟蒙》稱之為“倍廉法表”；李善蘭《垛積比類》稱之為“三角垛表”。近代中算史家李儼稱之為“巴斯噶三角形”，但根據《永樂大典》指出“巴斯噶三角形”最早由賈憲使用。。著名數學家華羅庚，在1956年寫的一本通俗讀物《從楊輝三角談起》，將賈憲的《開方作法本源》稱為“楊輝三角”，首次將“巴斯噶三角形”迴歸宋代數學家名下；此後的中學數學教科書和許多數學科普讀物都跟隨之。另一方面，專業的中國數學史著作，都用“賈憲三角”這個稱呼。。一個數在楊輝三角出現的次數.由1開始，正整數在楊輝三角形出現的次數為：∞,1, 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 2, 4, ... formula_47formula_48程式語言實現.Julia.function triangles(Lines)# 楊輝三角形coef = 1for i in 0:Linesglobal coeffor space in 1:Lines-iprint(" ")endfor j in 0:iif (j==0 || i==0)coef = 1elsecoef = Int(coef * (i-j+1)/j)endprint(" ",coef," ") # 每個數字後面加上空個以利間隔數字endprintln()endendtriangles(9)Go.package mainimport "fmt"//行數const LINES int = 10//楊輝三角func ShowYangHuiTriangle() {for i := 0; i &lt; LINES; i++ {//補空白for j := 0; j &lt; (LINES - i); j++ {fmt.Print(" ")for j := 0; j &lt; (i + 1); j++ {var length = len(nums)var value intif 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 TriangleArraypublic static void main(String[] args)final int NMAX = 10;// allocate triangular arrayint[][] odds = new int[NMAX + 1][];for (int n = 0; n &lt;= NMAX; n++){odds[n] = new int[n + 1];// fill triangular arrayfor (int k = 0; k &lt; 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 &lt;= k; i++)lotteryOdds = lotteryOdds * (n - i + 1) / i;odds[n][k] = lotteryOdds;// print triangular arrayfor (int[] row : odds)for (int odd : row)System.out.printf("%4d", odd);System.out.println();Python.程式碼量較少的實現方式如下：def triangles():L = [1]while True:yield LL = [sum(i) for i in zip([0]+L, L+[0])]下面是另一種較易理解的方式：def triangles():L = [1]S = []while True:yield LL = [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)Clsk = 8For I = 1 To NPrint String((N - I) * k / 2 + 1, " ");For J = 1 To Ia(I, 1) = 1a(I, I) = 1a(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 JPrintNext IEnd SubC++.//以下只有列出14行using namespace std;int P(int n){int a=1, i=1;while(i &lt;= 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 &lt; 14; i++){for(int j = 1; j &lt;= i; j++){cout « C(i - 1, j - 1) « " ";cout « endl;