求解500万以内的亲和数

2014-11-24 07:20:26 · 作者: · 浏览: 0

代码来自《编程艺术系列》

这段代码很优雅、很有内涵,如下:

#include 
  
   

using namespace std;

#define MAXVAl 5000000

int sum[MAXVAl+1];

int main(int argc, char* argv[])
{
	int i, j;
	for(i = 0; i <= MAXVAl; i++){
		sum[i] = 1;
	}
	for(i = 2; i+i <= MAXVAl; i++){
		j = i + i;
		while(j <= MAXVAl){
			sum[j] += i;
			j += i;
		}
	}
	for(i = 0; i <= MAXVAl; i++){
		if(sum[i] > i && sum[i] <= MAXVAl && sum[sum[i]] == i){
			cout << i << " " << sum[i] << endl;
		}
	}
	
	return 0;	
}