一道没想到居然没有超时的题,思路就是找小的那个数,然后取一半一直往下递减,找到所有约数的和,然后和较大的数比较是否相等。
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;
void main()
{
int a,b;
int n;
cin>>n;
while(n--)
{
scanf("%d %d",&a,&b);
int nMin = a<b?a:b;
int nMax = a>b?a:b;
int sum = 0;
for(int i=nMin/2;i>0;i--)
{
if(nMin % i == 0)
sum += i;
}
if(sum == nMax)
printf("YES\n");
else
printf("NO\n");
}
}