C++ 亲密数对算法 - 找出 2 到 N 之间的亲密数对

本程序使用 C++ 语言实现寻找亲密数对的算法,用户输入一个整数 N(2 到 2000 之间),程序会输出 2 到 N 之间的所有亲密数对。亲密数对是指两个数,其中一个数的真因子之和等于另一个数,反之亦然。

输入格式 一个整数 N。

输出格式 每行输出一对亲密数对,较小的数在前。

样例输入 300

样例输出 220 284 1184 1210 2620 2924 5020 5564 6232 6368

提示 亲密数对的数量不超过 10 个,按照从小到大的顺序输出。

代码示例

#include <iostream>
using namespace std;

// 计算一个数的真因子和
int sumOfProperDivisors(int num) {
  int sum = 0;
  for (int i = 2; i * i <= num; i++) {
    if (num % i == 0) {
      sum += i;
      if (i * i != num) {
        sum += num / i;
      }
    }
  }
  return sum;
}

int main() {
  int N;
  cin >> N;
  
  // 遍历 2 到 N 的所有数
  for (int i = 2; i <= N; i++) {
    for (int j = i + 1; j <= N; j++) {
      // 如果 i 和 j 互为亲密数
      if (sumOfProperDivisors(i) == j && sumOfProperDivisors(j) == i) {
        // 输出亲密数对
        cout << i << ' ' << j << endl;
      }
    }
  }
  return 0;
}
C++ 亲密数对算法 - 找出 2 到 N 之间的亲密数对

原文地址: https://www.cveoy.top/t/topic/owb7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录