#4304. C++ L12 亲和数

C++ L12 亲和数

🧾 C++ L12 亲和数

📌【题目描述】

在遥远的古代,人们发现某些自然数之间有特殊的关系:

如果两个正整数 ab,满足:

  • a 的所有​真因子​(即除 a 本身外能整除 a 的正整数)的和为 b
  • b 的所有真因子的和为 a

那么就称这对数字 (a, b) 是一对 ​**亲和数(Amicable Numbers)**​。

例如:

  • a = 220,真因子为:1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110,和为 284
  • b = 284,真因子为:1, 2, 4, 71, 142,和为 220 → 所以 (220, 284) 是亲和数。

📥【输入格式】

  • 第 1 行:一个正整数 n(1 ≤ n ≤ 100),表示后续测试数据组数;
  • 接下来 n 行:每行两个不超过 2,000,000 的正整数 ab,中间用空格分隔。

📤【输出格式】

输出共 n 行,每行一个整数:

  • 若对应输入对 (a, b) 为亲和数,输出 1
  • 否则输出 0

🎯【输入样例】

2
220 284
22 28

✅【输出样例】

1
0

💡【提示说明】

  • 需要实现一个函数 sum_of_proper_divisors(x) 来求出 x 的所有真因子之和;
  • 判断:若 sum(a) == bsum(b) == a,则为亲和数;
  • 合理控制遍历范围(建议枚举到 √x)

🧪【时间与空间限制】

时间限制 空间限制
1 秒 1024 KiB