题目地址:点击打开链接
思路:第一种方法,刚开始吧所有因子放到一个数组里面行,注意i*i<=x的放一次,多放也应该不影响,第二种方法,就是直接模拟小的因子,if语句里面再加一个判断,乘以1long long可以把数转化为long long类型
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <climits>
#include <cmath>
#include <cctype>
const int inf = 0x7f7f7f7f;//2139062143
typedef long long ll;
using namespace std;
int a[100];
int main()
{
int t;
ll x,y,z;
int i,j;
scanf("%d",&t);
while(t--)
{
ll sum;
bool flag = false;
scanf("%I64d%I64d%I64d",&x,&y,&z);
for(i=1; i*i<=x; i++)
{
for(j=1; j*j<=z; j++)
{
if(x % i == 0 && z % j == 0)
{
sum = z / j * i + x / i * j;//因子的所有可能组成情况
if(sum == y)
{
flag = true;
break;
}
sum = x / i * z / j + i * j;
if(sum == y)
{
flag = true;
break;
}
}
}
}
if(flag)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}