top1编程
← 返回题目
题解

【基础】亲密数对

1 条题解

  • 0
    @ 2026-7-31 4:58:00

    解题思路

    亲密数对: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