#4304. C++ L12 亲和数
C++ L12 亲和数
🧾 C++ L12 亲和数
📌【题目描述】
在遥远的古代,人们发现某些自然数之间有特殊的关系:
如果两个正整数 a
和 b
,满足:
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
的正整数a
和b
,中间用空格分隔。
📤【输出格式】
输出共 n
行,每行一个整数:
- 若对应输入对
(a, b)
为亲和数,输出1
- 否则输出
0
🎯【输入样例】
2
220 284
22 28
✅【输出样例】
1
0
💡【提示说明】
- 需要实现一个函数
sum_of_proper_divisors(x)
来求出x
的所有真因子之和; - 判断:若
sum(a) == b
且sum(b) == a
,则为亲和数; - 合理控制遍历范围(建议枚举到 √x)
🧪【时间与空间限制】
时间限制 | 空间限制 |
---|---|
1 秒 | 1024 KiB |