当前位置首页 > 百科资料> 正文

亲和数

2022-06-28 21:30:24 百科资料

人和人之间讲友情,有趣的是,数与数之间也有相类似的关系,数学家把一对存在特殊关系的数称为"亲和数"。常言道,知音难觅,寻找亲和数更使数学家绞尽了脑汁。亲和数是数论王国中的一朵小花,它有漫长的发现历史和美丽动人的传说。

  • 中文名 亲和数
  • 别称 朋友数、相亲数
  • 表达式 a=3*2^(x-1)-1, b=3*2^x-1,c=9*2^(2x-1)-1
  • 提出者 毕达哥拉斯
  • 提出时间 公元前580年-500年

术语简介

  亲和数是一种古老的数。

  在遥远的古代,人们发现某些自然数之间有特殊的关系:如果两个数a和b,a的所有除本身以外的因数之和等于b,b的所有除本身以外的因数之和等于a,则称a,b是一对亲和数。

发现历史

  首先发现220与284就是一对亲和数,在以后的1500年间,世界上有很多数学家致力于探寻亲和数,面对茫茫数海,无疑是大海捞针,虽经一代又一代人的穷思苦想,有些人甚至为此耗尽毕生心血,却始终没有收获。公元九世纪,伊拉克哲学、医学、天文学和物理学家泰比特·依本库拉曾提出过一个求亲和数的法则,因为他的公式比较繁杂,难以实际操作,再加上难以辨别真假,故它并没有给人们带来惊喜,或者走出困境。数学家们仍然没有找到第二对亲和数。直到费尔马(P.de Fermat,1601-1665)才发现了另一对亲和数:17296和18416。

  十六世纪,已经有人认为自然数里就仅有这一对亲和数。有一些无聊之士,甚至给亲和数抹上迷信色彩或者增添神秘感,编出了许许多多神话故事。还宣传这对亲和数在魔术、法术、占星术和占卦上都有重要作用等等。

毕达哥拉斯

  据说,毕达哥拉斯(Pythagoras, 希腊文Πυθαγόρας,约前580年-前500年)的一个门徒向他提出这样一个问题:"我结交朋友时,存在着数的作用吗?"毕达哥拉斯毫不犹豫地回答:"朋友是你的灵魂的倩影,要像220和284一样亲密。"又说"什么叫朋友?就像这两个数,一个是你,另一个是我。"后来,毕氏学派宣传说:人之间讲友谊,数之间也有"相亲相爱"。从此,把220和284叫做"亲和数"或者叫"朋友数"或叫"相亲数"。这就是关于"亲和数"这个名称来源的传说。220和284是人类最早发现,又是最小的一对亲和数。

费尔马

  距离第一对亲和数诞生2500多年以后,历史的车轮转到十七世纪,1636年,法国"业余数学家之王"费尔马找到第二对亲和数17296和18416,重新点燃寻找亲和数的火炬,在黑暗中找到光明。两年之后,"解析几何之父"--法国数学家笛卡尔(René Descartes)于1638年3月31日也宣布找到了第三对亲和数9437056和9363584。费马和笛卡尔在两年的时间里,打破了二千多年的沉寂,激起了数学界重新寻找亲和数的波涛。

  在十七世纪以后的岁月,许多数学家投身到寻找新的亲和数的行列,他们企图用灵感与枯燥的计算发现新大陆。可是,无情的事实使他们省悟到,已经陷入了一座数学迷宫,不可能出现法国人的辉煌了。

  正当数学家们真的感到绝望的时候,平地又起了一声惊雷。1747年,年仅39岁的瑞士数学家欧拉竟向全世界宣布:他找到了30对亲和数,后来又扩展到60对,不仅列出了亲和数的数表,而且还公布了全部运算过程。

欧拉

  欧拉采用了新的方法,将亲和数划分为五种类型加以讨论。欧拉超人的数学思维,解开了令人止步2500多年的难题,使数学家拍案叫绝。

  时间又过了120年,到了1867年,意大利有一个爱动脑筋,勤于计算的16岁中学生帕格尼尼(巴格尼尼),竟然发现数学大师欧拉的疏漏--让眼皮下的一对较小的亲和数1184和1210溜掉了。这戏剧性的发现使数学家如痴如醉。

麦达其和叶维勒汇

  在以后的半个世纪的时间里,人们在前人的基础上,不断更新方法,陆陆续续又找到了许多对亲和数。到了1923年,数学家麦达其和叶维勒汇总前人研究成果与自己的研究所得,发表了1095对亲和数,其中最大的数有25位。同年,另一个荷兰数学家里勒找到了一对有152位数的亲和数。

  在找到的这些亲和数中,人们发现,亲和数发现的个数越来越少,数位越来越大。同时,数学家还发现,若一对亲和数的数值越大,则这两个数之比越接近于1,这是亲和数所具有的规律吗?人们企盼着最终的结论。

  电子计算机诞生以后,结束了笔算寻找亲和数的历史。有人在计算机上对所有100万以下的数逐一进行了检验,总共找到了42对亲和数,发现10万以下数中仅有13对亲和数。但因计算机功能与数学方法的不够,目前还没有重大突破,但是,寻找亲和数未来正等待着不畏艰辛的数学家和计算机专家,同时,发现新的亲和数的捷报也正等待着不畏艰辛的数学家和计算机专家。

奇亲和数

  人们还发现每一对奇亲和数中都有3,5,7作为素因数。1968年波尔.布拉得利(P.Bratley)和约翰.迈凯(J.Mckay)提出:所有奇亲和数都是能够被3整除的。1988年巴蒂亚托(S.Battiato)和博霍(W.Borho)利用电子计算机找到了不能被3整除的奇亲和数,从而推翻了布拉得利的猜想。他找到了15对都不能被3整除的奇亲和数,最小的一对是:a=s*140453*85857199和 b=s*56099*214955207其中s=5^4*7^3*11^3*13^2*17^2*19*61^2*97*107.将各个因数乘起来 a=353804384422460183965044607821130625和b=353808169683169683168273495496273894069375.

  它们都是36位大数。作为一个未解决的问题,巴蒂亚托等希望有人能找到最小的。另一个问题是是否存在一对奇亲和数中有一个数不能被3整除。

  还有一个欧拉提出的问题,是否存在一对亲和数,其中有一个奇数,另一个是偶数?因为现在发现的所有奇偶亲和数要么都是偶数,要么都是奇数。200多年来尚未解决。

亲和数的研究

  主要有两方面:

  (1)寻找新的亲和数。

  (2)寻找亲和数的表达公式。

  关于后一项工作,早在9世纪,阿拉伯的学者泰比特(TabitibnQorra)就提出了一个构造亲和数的公式:

  设 a=3*2^(x-1)-1, b=3*2^x-1,c=9*2^(2x-1)-1,这里x是大于1的自然数,如果a、b、c全是素数的话。那么2*x*ab与2*x*c。便是一对相亲和数。

  例如,取x=2,得a=5,b=11,c=71,则2*2*5*11=220和2*2*71=284是一对亲和数。

亲和数举例

  例如220和284,1184和1210,2620和2924,5020和5564,6232和6368。

  亲和数列举:

  ans =

  220 284

  ans =

  1184 1210

  ans =

  2620 2924

  ans =

  5020 5564

  ans =

  6232 6368

  ans =

  10744 10856

  ans =

  12285 14595

  ans =

  17296 18416

  ans =

  63020 76084

  ans =

  66928 66992

  ans =

  67095 71145

  ans =

  69615 87633

  ans =

  79750 88730

  ans =

  100485 124155

  ans =

  122265 139815

  ans =

  122368 123152

  ans =

  141664 153176

  ans =

  142310 168730

  ans =

  171856 176336

  ans =

  176272 180848

  ans =

  185368 203432

  ans =

  196724 202444

  ans =

  280540 365084

  ans =

  308620 389924

  ans =

  319550 430402

  ans =

  356408 399592

  ans =

  437456 455344

  ans =

  469028 486178

  ans =

  503056 514736

  ans =

  522405 525915

  ans =

  600392 669688

  ans =

  609928 686072

  ans =

  624184 691256

  ans =

  635624 712216

  ans =

  643336 652664

  ans =

  667964 783556

  ans =

  726104 796696

  ans =

  802725 863835

  ans =

  879712 901424

  ans =

  898216 980984

  ans =

  947835 1125765

  ans =

  998104 1043096

  ans =

  1077890 1099390

  ans =

  1154450 1189150

  ans =

  1156870 1292570

  ans =

  1175265 1438983

  ans =

  1185376 1286744

  ans =

  1280565 1340235

  ans =

  1328470 1483850

  ans =

  1358595 1486845

  ans =

  1392368 1464592

  ans =

  1466150 1747930

  ans =

  1468324 1749212

  ans =

  1511930 1598470

  ans =

  1669910 2062570

  ans =

  1798875 1870245

  ans =

  2082464 2090656

  ans =

  2236570 2429030

  ans =

  2652728 2941672

  ans =

  2723792 2874064

  ans =

  2728726 3077354

  ans =

  2739704 2928136

  ans =

  2802416 2947216

  ans =

  2803580 3716164

  ans =

  3276856 3721544

  ans =

  3606850 3892670

  ans =

  3786904 4300136

  ans =

  3805264 4006736

  ans =

  4238984 4314616

  ans =

  4246130 4488910

  ans =

  4259750 4445050

  ans =

  4482765 5120595

  ans =

  4532710 6135962

  ans =

  4604776 5162744

  ans =

  5123090 5504110

  ans =

  5147032 5843048

  ans =

  5232010 5799542

  ans =

  5357625 5684679

  ans =

  5385310 5812130

  ans =

  5459176 5495264

  ans =

  5726072 6369928

  ans =

  5730615 6088905

  ans =

  5864660 7489324

  ans =

  6329416 6371384

  ans =

  6377175 6680025

  ans =

  6955216 7418864

  ans =

  6993610 7158710

  ans =

  7275532 7471508

  ans =

  7288930 8221598

  ans =

  7489112 7674088

  ans =

  7577350 8493050

  ans =

  7677248 7684672

  ans =

  7800544 7916696

  ans =

  7850512 8052488

  ans =

  8262136 8369864

  ans =

  8619765 9627915

  ans =

  8666860 10638356

  ans =

  8754130 10893230

  ans =

  8826070 10043690

  ans =

  9071685 9498555

  ans =

  9199496 9592504

  ans =

  9206925 10791795

  ans =

  9339704 9892936

  ans =

  9363584 9437056

  ans =

  9478910 11049730

  ans =

  9491625 10950615

  ans =

  9660950 10025290

  ans =

  9773505 11791935

  ans =

  10254970 10273670

  ans =

  10533296 10949704

  ans =

  10572550 10854650

  ans =

  10596368 11199112

  ans =

  10634085 14084763

  ans =

  10992735 12070305

  ans =

  11173460 13212076

  ans =

  11252648 12101272

  ans =

  11498355 12024045

  ans =

  11545616 12247504

  ans =

  11693290 12361622

  ans =

  11905504 13337336

  ans =

  12397552 13136528

  ans =

  12707704 14236136

  最长链:

  14316 - 19116 - 31704 - 47616 - 83328 - 177792 - 295488 - 629072 - 589786 - 294896 - 358336 - 418904 - 366556 - 274924 - 275444 - 243760 - 376736 - 318028 - 285778 - 152990 - 122410 - 97946 - 48976 - 45946 - 22976 - 22744 - 19916 - 17716 - 14316

相关程序

  用计算机编出的计算亲和数的JAVA 程序

  import java.util.ArrayList; import java.lang.Math; import java.lang.Double;

  public class love_num {

  public static void main(String[] args)

  {

  int intMain = 2;

  int intBig = 0;

  try

  {

  intBig = Integer.parseInt(args[0].toString());

  }

  catch (Exception e)

  {

  System.out.println("error:" + e);

  System.out.println("type command like "java love_num 50"");

  return;

  }

  while (true)

  {

  ArrayList listYakuSu1 = findYakuSu(intMain);

  int intSum1 = addYakuSu(listYakuSu1);

  //String strDebug = "";

  //String strDebug2 = "";

  if ( intSum1 == intMain )

  {

  System.out.println("self num:" + intSum1);

  //for (int i = 0; i < listYakuSu1.size(); i ++)

  //{

  // strDebug += listYakuSu1.get(i);

  // strDebug += ",";

  //}

  //System.out.println("YakuSu:" + strDebug);

  }

  else

  {

  ArrayList listYakuSu2 = findYakuSu(intSum1);

  int intSum2 = addYakuSu(listYakuSu2);

  if ( intSum2 == intMain )

  {

  System.out.println("love num:" + intMain + "--" + intSum1);

  //for (int i = 0; i < listYakuSu1.size(); i ++)

  //{

  // strDebug += listYakuSu1.get(i);

  // strDebug += ",";

  //}

  //System.out.println("YakuSu:" + strDebug);

  //for (int i = 0; i < listYakuSu2.size(); i ++)

  //{

  // strDebug2 += listYakuSu2.get(i);

  // strDebug2 += ",";

  //}

  //System.out.println("YakuSu:" + strDebug2);

  }

  }

  intMain ++;

  if (intMain > intBig)

  {

  return;

  }

  }

  }

  public static int addYakuSu (ArrayList listYakuSu)

  {

  //System.out.println("addYakuSu start ");

  int sum = 0;

  int temp = 0;

  for (int i = 0; i < listYakuSu.size() ; i ++ )

  {

  temp = Integer.parseInt(listYakuSu.get(i).toString());

  sum += temp;

  }

  //System.out.println("addYakuSu end " + sum);

  //System.out.println("");

  return (sum);

  }

  public static ArrayList findYakuSu (int intNum)

  {

  //String strDebug = "";

  //System.out.println("findYakuSu start " + intNum);

  ArrayList listYakuSu = new ArrayList();

  double dbNum = (double)intNum;

  double dbRoot = Math.sqrt(dbNum);

  Double d = new Double(dbRoot);

  int intRoot = d.intValue() ;

  //System.out.println("root:" + intRoot);

  // if (intHalf * 2 == intNum)

  // {

  // }

  // else

  // {

  // intHalf ++;

  // }

  listYakuSu.add ("1");

  for (int i = 2; i <= intRoot ; i ++)

  {

  int intPart = intNum/i;

  if (intPart * i == intNum)

  {

  if (intPart == i)

  {

  listYakuSu.add (Integer.toString(i));

  //strDebug += Integer.toString(i);

  //strDebug += ",";

  }

  else

  {

  listYakuSu.add (Integer.toString(i));

  listYakuSu.add (Integer.toString(intPart));

  //strDebug += Integer.toString(i);

  //strDebug += ",";

  //strDebug += Integer.toString(intPart);

  //strDebug += ",";

  }

  }

  }

  //System.out.println("findYakuSu end:1," + strDebug);

  //System.out.println("");

  return (listYakuSu);

  }

  }

  用计算机编出的计算亲和数的MATLAB程序

  for a=2:1:100000000

  t=1;

  n=2;

  s=sqrt(a);

  s=fix(s);

  if a==s^2

  t=t+s;

  end

  while n<s

  m=mod(a,n);

  if m==0

  t=t+n+a/n;

  end

  n=n+1;

  end

  if t>a

  b=t;

  l=1;

  d=2;

  p=sqrt(b);

  p=fix(p);

  if b==p^2

  l=l+p;

  end

  while d<p

  m=mod(b,d);

  if m==0

  l=l+d+b/d;

  end

  d=d+1;

  end

  if l==a

  [a,b]

  end

  end

  end

  求a~b之间亲和数的Free Pascal IDE程序

  var

  s,q,r,t,a,b:longint;

  begin

  read(a,b);

  for a:=a to b do

  begin

  inc(s);

  t:=0;

  for r:=1 to s-1 do

  if s mod r=0 then

  t:=t+r;

  q:=t;

  t:=0;

  for r:=1 to q-1 do

  if q mod r=0 then

  t:=t+r;

  if (t=s)and(s<>q) then

  if s<q then

  writeln(s,' ',q);

  end;

  end.

  用计算机编出的c++程序

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net