階乘符號
1751年,歐拉以大寫字母M表示m階乘,即 M=1×2×3×…×m
1799年,魯非尼在他出版的方程論著述中,則以小寫字母π表示m階乘,而在1813年,高斯則以Π(n)來表示n階乘。而用來表示n階乘的方法起源於英國,但仍未能確定始創人是誰。直至1827年,由於雅萊特的建議而得到流行,現在有時也會 以這個符號作為階乘符號。
而最先提出階乘符號n!的人是克拉姆 (1808),後來經過歐姆等人的提倡而流行,直至現在仍然通用。
當n較大時,直接計算n!變得不可能,這時可通過斯特靈(Stirling)公式計算近似算或取得大小範圍。
階乘數
由fxccommercial提出,系fxccommercial本人發現並歸納整理成為一個新的數學定理猜想.這個公式描述的是,從大到小排列的n+1個數,對每個數取n次方,用(-1)^nC_n^k做係數,實現奇偶項數的差項和,則這列數的和為n!,目前fxccommercial已得到一個關於他的推論,經驗證是正確的。歷史上並沒有人得到過類似的公式,可以認為它是人類對數學的又一個深刻的認識,但目前關於這個定理的證明尚無人能給出,筆者期待這個定理證明的解決.
約定∑_k=0_n 表示對從0到n的n+1項求和,則該定理表述為: ∑_k=0_n (-1)^k*C_n^k*(a-mk)^n = m^n*n! (a屬於R, k,m,n屬於N) n^k : n 的 k 次方, ^ 用來表示上標; a/b: a 除以 b; a*b: a 乘以 b,有時可以忽略*; n!: n 的階乘; [x]: 不超過x的最大整數; : x的小數部分; a_n: 數列第n項, _ 用來表示下標n; C_n^k: 組合數,表示n個元素里取k個元素.
pascal 階乘數與全排列
所謂階乘數是指其最低位的基為1,即逢一進一,每高一位則基加一,即進位依次為二、三…,n位階乘數共有n!個。如三位階乘數從小到大依次為:000,010,100,110,200,210。設n元集合S={a 0 , a1 , a2, … an-1},則S的全排列與n位階乘數一一對應。對應方式為:從n個元素中選取第一個元素有n種方法,被選取的元素的下標值為0到n-1之間的一個整數,將這個數作為n位階乘數的最高位,將剩下的元素按下標從0到n-2重新編號,重新編號時不改變它們的相對次序,則選取第二個元素有n-1種方法,被選取的元素的下標值為0到n-2之間的一個整數,將這個數作為n位階乘數的次高位,…,選取最後一個元素只有1種方法,被選取的元素的下標值為0,將這個數作為n位階乘數的最低位,這樣任何一種排列必可對應一個n位階乘數,顯然這種對應關係是一一對應的。問題:請用階乘數法生成1到n的全排列。 [算法設計] 首先用最低位加一的方法依次產生所有的n位階乘數,對任意一個 n位階乘數用上述方法求出其對應的排列。 [參考程式] program ex5(input,output); const maxn=9; type arraytype=array[0..maxn] of integer; var i,j,n:integer; a,b,p:arraytype; begin write('Input n:'); readln(n); for i:=0 to n-1 do b[i]:=0; while b[n]=0 do begin for i:=0 to n-1 do a[i]:=i+1; for i:=n-1 downto 0 do begin p[i]:=a[b[i]]; for j:=b[i] to i-1 do a[j]:=a[j+1] end; for i:=n-1 downto 0 do write(p[i],' '); write(' ':20-2*n); b[0]:=b[0]+1; i:=0; while b[i]>i do begin b[i]:=0; b[i+1]:=b[i+1]+1; i:=i+1 end end; writeln end. 解釋程式
計算
計算n!時,當n不太大時,普通的科學計算機都可以計算,能夠處理不超過數值的計算機可以計算至69!。
當n很大時,可以用斯特林公式估計