伴随数组求亲和数::伴随数组

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 互为亲和数。

空间换时间的思想 

点赞