亲和数是一种古老的数。
遥远的古代,人们发现某些自然数之间有特殊的关系:如果两个数a和b,a的所有除本身以外的因数之和等于b,b的所有除本身以外的因数之和等于a,则称a,b是一对亲和数。
220=1+2+4+71+142=sum[284],
284=1+2+4+5+10+11+20+22+44+55+110=sum[220]
284=1+2+4+5+10+11+20+22+44+55+110=sum[220]
这样220和284就是一对亲和数。
#include<stdlib.h>
#include<iostream>
using namespace std;
int sum[5000001];
int main()
{
int i, j;
for (i = 0; i <= 5000000; i++)
sum[i] = 1; //1是所有数的真因数所以全部置1
for (i = 2; i + i <= 5000000; i++)
{
for(j = i + i; j <= 5000000; j += i)
{
sum[j] += i;
}
}
for (i = 220; i <= 5000000; i++)
{
if (sum[i] > i && sum[i] <= 5000000 && sum[sum[i]] == i)
{
cout<<i<<" "<<sum[i]<<endl;
}
}
system("pause");
return 0;
}