相亲数及其计算
在数学中有一些奇妙的数字,例如完美数、回文数、相亲数、水仙花数等等。本文介绍其中的相亲数。
1 相亲数
定义:不同的正整数A和正整数B组成的数对称为相亲数,当且仅当A的真因数之和等于B且B的真因数之和等于A。
例如,整数220的真因数包括1、2、4、5、10、11、20、22、44、55、110,而1+2+4+5+10+11+20+22+44+55+110=284;反过来,284的真因数包括1、2、4、71、142,而1+2+4+71+142=220。因此,220和284是一对相亲数。
220和284是第一对相亲数。此后,人们一直难以找到其他的相亲数,从而引起人们的猜想是不是自然界只有这一对相亲数,并由这一对数引发了很多浪漫的神话。
17世纪法国数学家费尔玛进行了大量冗长乏味的计算后,终于找到了第二对相亲数17296和18416。两年后,法国“解析几何之父”笛卡尔于1638年3月31日宣布找到了第三对亲和数9437056和9363584。
著名数学家欧拉也研究过相亲数这个问题。1750年,他先后公布了60对相亲数。不仅列出了亲和数的数表,而且还公布了全部运算过程。欧拉将相亲数划分为五种类型加以讨论。例如第一类是寻找形如aqp、ar的相亲数对,这里p、q、r是不能整除a的互异素数,a=2n。他用试的方法讨论了22×5×11=220和22×7=284,得到了第一对相亲数,依此又分别讨论其他情况,在第一类型里经过计算一共得到了11对相亲数。
欧拉的发现,解开了2000多年来的难题,使数学家惊喜叫绝。可是,由于方法与工具限制,人们却难以一个一个地验算核对,并且难以验证是否还存在其他的相亲数。在1866年,一个意大利青年巴格尼尼发现1184与1210是仅仅比220与284稍为大一些的第二对相亲数。欧拉算出了长达几十位数字的相亲数,却偏偏遗漏了近在身边的第二对。
时光又过了半个多世纪,数学家在前人的基础上更新方法,陆陆续续又找到了许多对新的相亲数。到1923年,数学家麦达其和叶维勒汇总前人研究成果与自己研究所得,发表了1095对相亲数,其中最大的数有25位。同年,另一个荷兰数学家里勒找到了一对有152位数的相亲数。
随着时间的推移,人们靠笔算很难像欧拉那样一下发现众多的相亲数;随着数位越来越大,发现的数也越来越少。此时有数学家推测:若一对相亲数的数值愈大,则这两个数之比愈接近于1。这个推测是否成立,还有待数学家的证实。
现代以来,随着电子计算机系统计算能力的不断增强,很多以前不能解决的问题都能借助计算机而解决。相亲数也是如此。据70年代统计,人们共找到1200多对相亲数,并且,有人还曾有序不漏地用计算机检验与搜寻相亲数。例如近10年来,美国数学家在耶鲁大学先进的计算机上,对所有100万以下的数逐一进行了检验,总共找到了42对相亲数,发现10万以下的仅有13对,部分地消除了对欧拉等人列出的相亲数数表的疑虑。
目前,现在通过已发现10位以下的大量相亲数。但是,寻找相亲数还有许多有待探求的问题,如:目前找到的每一对相亲数所含的两个数,总是同时为偶数或同时为奇数,是否存在一个是偶数,而另一个是奇数的相亲数?目前找到的奇相亲数均是3的倍数,这是偶然性,还是必然规律?
下面给出一段本人用C语言编写的计算相亲数的程序:
void main()
{
long int A = 1; //保存第一个数
long int B = 1; //保存第二个数
int SumOfA; //保存第一个数真因数之和
int SumOfB; //保存第二个数真因数之和
int j;
//对每个数A都算出真因数之和SumOfA(设为B)
//对B计算出真因数之和SumOfB
//如果SumOfB等于A,则A和B就是一对相亲数
for(A=2; A<1000000; A++)
{
//A的因数和,初始为0
SumOfA = 0;
//判断任意小于A的整数j是否是A的因数
//若是,则把j加到因数和中
for(j=1; j<=A/2; j++)
if(A%j == 0)
{
SumOfA += j;
}
//设置B=SumOfA,计算B的真因数之和SumOfB
B = SumOfA;
SumOfB = 0;
for(j=1; j<=B/2; j++)
if(B%j == 0)
{
SumOfB+=j;
}
//判断A和SumOfB是否相等
//注意:还要判断两个数A和B是否相等!
//A>B时会出现重复输出相亲数,因此不输出
if(( A == SumOfB) &&( A < B))
printf("%d, %d/n", A, SumOfA);
}
}
这是一个未经优化的程序,运行时找到10对相亲数所用的时间比较短,但要获得更多的相亲数,需要更长的运行时间。据报道,美国数学家在耶鲁大学的计算机上,对所有一百万以下的数进行了检验,共找到了42对“相亲数”。下表仅列出由上面程序计算出的前22对“相亲数”:
220,284
1184,1210
2620,2924
5020,5564
6232,6368
10744,10856
12285,14595
17296,18416
63020,76084
66928,66992
67095,71145
69615,87633
79750,88730
100485,124155
122265,139815
122368,123152
141664,153176
142310,168730
171856,176336
176272,180848
185368,203432
196724,202444
值得一提的是,约公元9世纪时,阿拉伯数学家本·科拉建立了一个有名的相亲数公式:
对任意大于1的正整数x,若a = 3*2x-1、b=3*2x-1-1、c=9*22x-1-1都是素数,则2xab与2xc就是一对相亲数。
但是这个公式实际计算起来特别复杂,在依靠人工运算的古代,并不能使人们发现更多的相亲数,这个公式也未经验证。
2 金兰数
上面介绍的相亲数是两个正整数的真因数之和互相等于对方,金兰数是相亲数的扩展。若正整数A的真因数之和等于B,B的真因数之和等于C,C的真因数之和等于C,而C的真因数之和恰好等于A,则称A、B、C这三个正整数组成金兰数对。
3 n环相亲数链
上面提到金兰数是相亲数的扩展,实际上,相亲数还可以在金兰数的基础上进行更多的扩展:对于正整数A1、A2、A3、…、An-1、An,若A1的真因数之和等于A2,A2的真因数之和等于A3,…,An-1的真因数之和等于An,而An的真因数之和恰好等于A1,则称正整数A1、A2、A3、…、An-1、An组成n环相亲数链。