亲和数

来源:互联网 发布:淘宝号怎么快速升3心 编辑:程序博客网 时间:2024/05/19 12:12

如果两个数a和b,a的所有真因数之和等于b,b的所有真因数之和等于a,则称a,b是一对亲和数。

 例如220和284,1184和1210,2620和2924。 分析: 首先得明确到底是什么是亲和数? 亲和数问题最早是由毕达哥拉斯学派发现和研究的。

他们在研究数字的规律的时候发现有以下性质特点的两个数: 

220的真因子是:1、2、4、5、10、11、20、22、44、55、110; 

284的真因子是:1、2、4、71、142。

 而这两个数恰恰等于对方的真因子各自加起来的和(sum[i]表示数i 的各个真因子的和),即 220=1+2+4+71+142=sum[284], 284=1+2+4+5+10+11+20+22+44+55+110=sum[220]。 

实现代码如下:

int aNear[50010];for(int n=1;n<50010;n++){aNear[n] = 1;}for(int k = 2;k<25000;k++){int j = k + k;while(j<50000){aNear[j] += k;j = j+k;}}for(int d=220;d<50010;d++){if(aNear[d]>d&&aNear[d]<50000&&(d == aNear[aNear[d]])){printf("\n");printf("%d  %d",d,aNear[d]);}}
该方法是从下到大判断某个数,假如该数是某个数的因子则加上去;

比如:当k为2时,就将2,4,6,8.....加上2

    k为3时,将3,6,9,12.... 加上3依此类推,最终的到完整的数据

以上信息来自《程序员编程艺术》



原创粉丝点击