1. 简单百科
  2. 阶乘数

阶乘数

阶乘数是一种有着特殊规律、每位以阶乘为权的数字。

它们的规律符合公式: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={a0,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位阶乘数用上述方法求出其对应的排列。[参考程序]programex5(input,output);constmaxn=9;typearraytype=array[0..maxn]ofinteger;vari,j,n:integer;a,b,p:arraytype;beginwrite('Inputn:');readln(n);fori:=0ton-1dob[i]:=0;whileb[n]=0dobeginfori:=0ton-1doa[i]:=i+1;fori:=n-1downto0dobeginp[i]:=a[b[i]];forj:=b[i]toi-1doa[j]:=a[j+1]end;fori:=n-1downto0dowrite(p[i],'');write('':20-2*n);b:=b+1;i:=0;whileb[i]\u003eidobeginb[i]:=0;b[i+1]:=b[i+1]+1;i:=i+1endend;writelnend

参考资料