階乘數

階乘數

階乘數是一種有著特殊規律、每位以階乘為權的數字。

它們的規律符合公式:abcd=a*a!+b*b!+c*c!+d*d! 。即:該數據的值等於各個位上數字乘以其階乘數之和。因為0-9的數字的階乘值不會特別大,所以階乘數也有上限。用窮舉法可以找到所有的階乘數,利用計算機求階乘數非常的方便。

公式,階乘數與全排列,

公式

由fxccommercial提出,系fxccommercial本人發現abcd=a*a!+b*b!+c*c!+d*d!並歸納整理成為一個新的數學定理猜想。這個公式描述的是,從大到小排列的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個元素.

階乘數與全排列

所謂階乘數是指其最低位的基為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

相關詞條

熱門詞條

聯絡我們