如果两个数a和b,a的所有真因数之和等于b,b的所有真因数之和等于a,则称a,b是一对亲和数。 例如220和284,1184和1210,2620和2924。
#define N 5000000
void findQHNums(int n) {
int* sum = new int[n];
memset(sum, 0, n * sizeof(int));
//N内的真因子
for (int i = 1; i <= n / 2; ++i) {
//计算以i为真因子的数(i的倍数)的亲和值
for (int j = i * 2; j <= n; j += i) {
sum[j] += i;
}
}
for (int i = 2; i < n; ++i) {
if (sum[i] > i && sum[i] <= n && sum[sum[i]] == i) {
cout << i << ' ' << sum[i] << endl;
}
}
}