int sum[5000000] = {0};
void InitSum()
{
for(int i=1; 2*i <= 5000000; ++i)
{
int j = i+i;
while(j <= 5000000)
{
sum[j] += i;
j += i;
}
}
}
void GetQHNumber()
{
InitSum();
for(int j=1; j<=5000000; ++j)
{
int i = sum[j];
if(i<= 5000000 && sum[i] == j && j<i)
{
cout << j << " " << i << endl;
}
}
}
亲和数:sum(i)表示i 除i外的所有因数之和, sum(i) = j , sum(j) = i; i and j 互为亲和数。
空间换时间的思想