matlab求亲和数对_第1页
matlab求亲和数对_第2页
matlab求亲和数对_第3页
matlab求亲和数对_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Matlab编程训练题(一):找出10万以内的所有亲和数对(附代码)说明:什么是亲和数? 亲和数是这样一对正整数a和b,使得a的所有真因子的和等于b,而b的所有真因子的和等于a。亲和数问题最早由毕达哥拉斯学派发现和研究的。他们在研究数字的规律的时候发现有以下的性点的两个数:1+2+4+5+10+11+20+22+44+55+110=284,1+2+4+71+142=220,就是220的真因子是1、2、4、5、10、11、20、22、44、55、110,它们的和是284;284的真因子是1、2、4、71、142,其和恰好是220。这是最早发现的一对亲和数,也是最小的一对亲和数。考虑到1是每个整数

2、的因子,把除去整数本身之外的所有因子叫做这个数的“真因子”。如果两个整数,其中每一个数的真因子的和都恰好等于另一个数,那么这两个数,就构成一对“亲和数”。3对亲和数有兴趣的人大约在公元9世纪,杰出的阿拉伯数学家本科拉建立了一个有名的亲和数公式:设a=32x-1,b=32x-1-1,c=922x-1-1, 这里x是大于1的自然数,如果a、b、c全是素数的话,那么2xab与axc。便是一对亲和数。例如,当x=2时,我们不难算出a=11,b=5,c=71,它们全都是素数,所以2xab=22115=220; 2xc=2271=284。后来的人们对亲和数研究一直保持着极大的兴趣,特别是大数学家费尔马、笛

3、卡尔和欧拉等都曾经研究过亲和数。1636年法国数学家费马发现了第二对亲和数,它们是17962与18416。1638年笛卡尔给出了第三对亲和数。第三对和第四对亲和数,即17926与18416及9363548与9437506。 要数对亲和数做过比较深入研究和为寻找亲和数花了很多功夫的人应当是瑞士的著名数学家欧拉。1747年大数学家欧拉一下子找出了30对,3年后,1750年欧拉向公众宣布了另外的30对亲和数,这样亲和数的数量又增加到了62对,并给出了一个有62对亲和数表。这样大的进展真的给人们一个大的惊喜。可是这样一来,人们反倒觉得既然大数学家欧拉都已经研究过亲和数了,而且他一个人就发现了60对亲和

4、数。欧拉算出了长达几十位、天文数字般的亲和数,那么应该能够计算的数可能都被欧拉找出来了,肯定不会有什么遗漏。但是,让人没有想到的是,除去最小的220与284之外,另一对亲和数1184与1210竟然被欧拉和另外几位数学大师都漏过了。这对亲和数是在一百多年之后,当“亲和数”的话题不那么热了,似乎已被世人淡忘的时候,1886年一个16岁的意大利男孩帕加尼尼发现这对亲和数,如果把亲和数按从小到大的顺序排列,那么这个少年发现的亲和数是排在第二位。这也可以说明一个现象,就是“百密一疏”,被漏过的恰恰是近在第一对亲和数身旁的第二对1184与1210,最容易的反倒是被人忽略了。 对于亲和数的性质我们知道的还不

5、多,能否用一个公式求出所有的亲和数也不清楚。但是随着计算机的性能不断地提高,利用计算机计算亲和数要比过去容易得多,可以找出更多的亲和数。目前已经知道的有1000多对亲和数,而10000以内的只有5对,在100000以内有13对,它们是: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。Code:ticN=100000; flag=zeros(N,1); %记录

6、是否计算过真因子和sumfac=zeros(N,1); %sumfac(n):n的真因子和for n=1:N if (flag(n)=0) %还没有计算过n的真因子和,避免重复计算真因和 n1=1; %n1用来储存真因子和 for i=2:n/2 %for 循环求出真因子和 if mod(n,i)=0 n1=n1+i; if n1N %如果真因子和已然超过100000,那么跳出此循环 break; end end end flag(n)=1; sumfac(n)=n1; if (n1N)|(n=n1) continue; %真因子和超过100000,越过本次循环,进入下一次循环 end if (flag(n1)=0 ) %如果没有计算过n1的真因子和,则计算 n2=1; %n2:储存n1的真因子和 for i=2:n1/2 %计算真因子和 if mod(n1,i)=0 n2=n2+i; if n2n break; end end end flag(n1)=1; sumfac(n1)=n2;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论