如果两个数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依此类推,最终的到完整的数据
以上信息来自《程序员编程艺术》