题解
【基础】亲密数对
1 条题解
-
0
解题思路
亲密数对:A 的因子和(不包括 1 和 A 本身)等于 B,且 B 的因子和等于 A。
比如 48 和 75:
- 48 的因子:2+3+4+6+8+12+16+24 = 75
- 75 的因子:3+5+15+25 = 48
方法:遍历 2 到 N,对每个数求因子和,再检查是否构成亲密数对。
注意:只输出 a < b 的配对,避免重复。
参考代码
#include <iostream> using namespace std; int sumFac(int x) { int s = 0; for (int i = 2; i * i <= x; i++) { if (x % i == 0) { s += i; if (i * i != x) s += x / i; } } return s; } int main() { int n; cin >> n; for (int a = 2; a <= n; a++) { int b = sumFac(a); if (b > a && b <= n && sumFac(b) == a) { cout << a << " " << b << endl; cout << b << " " << a << endl; } } return 0; }复杂度分析
- 时间复杂度:O(N√N)
- 空间复杂度:O(1)
- 1