求5000000以内的亲和数

来源:互联网 发布:小苍mm淘宝店 编辑:程序博客网 时间:2024/05/03 06:48

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

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

伴随矩阵的思想很值得学习

#include <stdio.h>#include <string.h>#define num 5000000int sum[num];int main(){int i,j;memset(sum,0,sizeof(sum));for(i=0;i<=num;i++)sum[i]+=1;for(i=2;i<<1<=num;i++){j=i+i;while(j<=num){sum[j]+=i;j+=i;}}for(i=220;i<=num;i++)if(sum[i]>i && sum[i]<=num && sum[sum[i]]==i)printf("%d %d\n",i,sum[i]);return 0;}

转载声明:http://blog.csdn.net/v_JULY_v/article/details/6441279