数学是自然科学的基础,物理学和化学的许多原理必须用数学来解释和描述。这里我们反其道而行之,我们用物理化学的概念来解释数的性质。
在数学上,数有复数,无理数,有理数,整数,自然数之分。我们这里仅仅讨论最简单的一类数,自然数。
对于自然数,我们能够从2个范畴来讨论之。
我们知道自然数有2个含义。1是计数,表示数的多少。2是序数,表示物体的顺序。计数系中,最基本的数是1,它是数的最基本单位,在基本单位的基础上,不断的增加一个单位,就得到一个又一个的整数。将数与原子这个概念对应,数1对应于氢原子(只有一个质子)。和原子不同的是,自然数只含带电的“质子”,不含中子。自然数的质量类似于原子的序数或者核电荷数,等于自然数的值。两个自然数相加得到一个新的自然数,满足自然数的质量守恒定律,即将2个自然数相加,其和的质量等于两个加数的质量的和。自然数的计数概念是小学一年级数学课的研究对象,是自然数的的初级概念。这里,我们将重点放在自然数的另一个范畴,数的化学性质,我们从化学角度来研究数,对应于数的高级概念--数论。
我们知道,化学的基本概念是元素,所有物质都是由元素构成,只有一种元素组成的物质叫单质,包含一种以上元素的物质构成的纯净物理称之为化合物。而数论的基本概念是质数,所有的数都可以表示为质数的乘积,即自然数的唯一分解定理。质数的分解式只包括一个质数,而合数的分解式则包含一个以上的质数。我们这里将质数对应于化学概念的元素,而合数则对应于化学概念的化合物。我不知道,物理学家是否证明了有无限多种元素。但数学家已经证明,有无限多个质数。
在化学上,两种或者两种以上单质在一定条件下可发生化学反应,生成化合物。类似的,两个或者多个质数进行相乘可得到一个合数。质数相乘和化学反应不同,化合反应可能消耗能量,也可能释放能量,而在质数相乘得到合数的过程中总是要消耗能量。在自然科学领域中,能量的单位是焦耳。而在数的合成过程中,消耗的能量则用CPU指令的周期数来表示。
与化合反应相对的是分解反应,化合物在一定的条件下,可以分解成单质。类似的,合数亦可分解为质数的乘积表示。同等质量的不同化合物进行分解反应所需要的能量一般是不同的,这和组成它的元素的有关,如分解氧化汞只需要较低的温度,较少的能量,而分解氟化钾则只能使用电化学分解法,需要很多能量。类似的,分解一个自然数需要的能量也不相同,这和组成它的质数的有关,使用普通的方法,当一个合数的各个质因数都较小时,需要较少的能量,反之则需要较多的能量,合数的分解质数论中的一个重要研究课题。
数不同于普通物体,它是无形的,没有长宽高的概念,也没有重量。我们这里定义数的数的质量等于数的长度。数的长度用对数来定义。对数的底数,也称为基radix,一般选择2^n或者10^n .如2,2^32, 10,1000 等。例如,以2作为基,则2进制数1000的长度(质量)=log2(8)=3, 1111的长度(质量)等于log2(15)=3.9.
我们定义数的体积为,存储一个数所占用的空间。我们知道,一个数必须存储在一个或者多个连续的存储单元中,存储单元可能是内存中的一个存储单元,也可能是磁盘中的一个扇区。存储单元的大小是离散的,最小单位是bit,表示一个2进制位, 除了bit 外,还有byte(1byte=8bit), word(1word=2byte),dword(1dword=4byte),sector (1 sector=512byte). 我们定义byte,word,dword等为数的体积单位。如果将2进制数1000存储于一个字节单元,则它将占用1byte,如果将其存储于一个DWORD单元,则它将占用1个DWORD。可见,同样一个数,存储于不同存储单元,占据的空间也不一样,所以体积也不一样。
我们定义自然数的质量与其体积之比为自然数的密度。如果采用常规的存储方式(非压缩方法)存储自然数,则自然数的密度总是小于1,借用极限的概念,可无限接近但总是不能达到1. 例如,我们采用字节单元存储2进制数1111,则radix(基)等于256, 它的长度是log256(15) ≈0.488,而 2进制数11111111 的长度log256(255) ≈0.999, 他们的体积都是1,所以其密度分别为0.488和0.999.
若自然数c=a*b, 由对数的性质可知 log(c)=log(a)+log(b), 而由于自然数n的质量定义为log(n),故有定理。两个自然数乘积的质量等于两个自然数质量的和。故此,我们可以所,在自然数合成过程中,遵循质量守恒定律。
定义1:我们定义自然数的能量e=0.5×m^2(二分之一乘以m的平方)。
定义2:若自然数n1的体积是V1, n2的体积是V2, 则两个自然数相乘所消耗的能量是V1×V2.
如果两个自然数非常接近于radix,则m接近于v,如以10为基,9000和9999的体积都是4,而质量分别为3.95和3.999957。容易看出,一个数的质量越大,则其质量和体积越接近,密度越接近于1. 在自然数很大的情况下,有近似公式:两个自然数相乘消耗的能量等于两个自然数质量的乘积。可以证明,多个充分大的自然数相乘所需的能量和相乘的顺序无关。下面用例子证明,若n1,n2,n3,n4表示4个充分大的自然数,为了方便起见,我们设它的体积都是1,而质量都近似为1. 我们采用两种方式相乘。
方式1:
step1: r1= n1 * n2 , 消耗的能量为1×1=1,r1的质量为2
step2: r2= r1 * n3 , 消耗的能量为2×1=1,r2的质量为3
step3: r3= r2 * n4 , 消耗的能量为3×1=1,r3的质量为4
在整个相乘的过程中,消耗的能量等于1+2+3=6.
方式2:
step1: r1= n1 * n2 , 消耗的能量为1×1=1,r1的质量为2
step2: r2= r3 * n4 , 消耗的能量为1×1=1,r2的质量为2
step3: r3= r2 * r3 , 消耗的能量为2×2=4,r4的质量为4
在整个相乘过程中,消耗的能量为1+1+4=6。所以自然数化合消耗的能量和顺序无关。在方式1中,在化合反应之前,4个自然数的能量是4×(0.5×1×1)=2, 在化合反应后,其积的能量是0.5×4×4=8,消耗的能量是8-2=6, 这和方式1和方式2得到的结果是相同的。固有:几个充分大的数进行化合反应(相乘),其积的能量等于各个数的能量加上消耗的能量,这可以看作是数的化合反应能量守恒定律。注意,数的分解不遵循能量守恒定律。
值得注意的是,2.8 的结论是基于自然数的密度近似于1的情况下做出的。当自然数的密度远小于1时,则自然数相乘所需能量则和相乘顺序有关。现举例如下,若n1,n2,n3,n4 是自然数,其密度接近于0.5,如在DWORD为体积单位,n=65535,则其密度为log(65535)/log(4294967296) ≈0.499999312). 则2种相乘顺序消耗的能量如下:
方式1:
step1: r1= n1 * n2 ,消耗的能量为1×1=1,r1的质量=0.5+0.5=1,体积为1
step2: r2= r1 * n3 , 消耗的能量为1×1=1,r2的质量=1+0.5=1.5,,体积为2
step3: r3= r2 * n4 , 消耗的能量为2×1=2,r3的质量为1.5+0.5=2, 体积为2
方式2:
step1: r1= n1 * n2 ,消耗的能量为1×1=1,r1的质量=0.5+0.5=1,体积为1
step2: r2= n3 * n4 ,消耗的能量为1×1=1,r2的质量=0.5+0.5=1,,体积为1
step3: r3= r1 * r2 , 消耗的能量为1×1=1,r3的质量为1+1, 体积为2
由方式1和方式2的3个步骤可知,方式1消耗的总能量为4,而方式2消耗的总能量仅为3. 此时四个数乘积的能量为0.5×2×2=2,容易看出,其能量小于四个数的能量的和与消耗的能量的和。在2.8中,我们定义,若自然数n1的体积是V1, n2的体积是V2, 则两个自然数相乘所需要的能量E =V1*V2。这里的e为实际消耗的能量,称为实际能耗。我们这里再做一个定义,理想能耗E=m1*m2. 由于数的质量总是小于数的体积,所以实际能耗总是高于理想能耗。我们称理想能耗与实际能耗的比为功率因子。在计算若干个数的乘积时,我们总是希望功率因子越大越好。为此,我们需要遵循的原则是,在做每次乘法是,尽量保持两个乘数质量相近。
特别说明,本文为作者在思考阶乘算法中得到的一些有趣的理论。首次发表于作者的Csdn博客和数学研发论坛,转载请注明原始出处。作者e-mail: [email protected]