#include <cstdio>
#include <cmath>
int sum(int);// 求真约数的和
//#define yangyuan
int main()
{
#ifdef yangyuan
freopen("in", "r", stdin);
#endif // yangyuan
int m, a, b;
scanf("%d", &m);
while (m--)
{
scanf("%d%d", &a, &b);
if (a == sum(b) && b == sum(a))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
inline int sum(int x)
{
if (x == 0 || x == 1)// 0没有约束,1没有真约数
return 0;
int max = x >> 1, sum = 1;
for (int i = 2; i <= max; ++i)
if (x % i == 0)
sum += i;
return sum;
}根据亲和数的定义,分别求解真约数的和,然后判断和是否相等就好。


被折叠的 条评论
为什么被折叠?



