Description
Jam has a math problem. He just learned factorization.
He is trying to factorize






into the form of




























.
He could only solve the problem in which p,q,m,k are positive numbers.
Please help him determine whether the expression could be factorized with p,q,m,k being postive.
He is trying to factorize





































He could only solve the problem in which p,q,m,k are positive numbers.
Please help him determine whether the expression could be factorized with p,q,m,k being postive.
Input
The first line is a number
, means there are









cases
Each case has one line,the line has
numbers


































Each case has one line,the line has

























Output
You should output the "YES" or "NO".
Sample Input
2 1 6 5 1 6 4
Sample Output
YES NO
Hint
The first case turn $x^2+6*x+5$ into $(x+1)(x+5)$
这个题我刚开始做的是用一个二维数组,把mpqk的所有情况全部列举出来,但是不知道为啥,一直wa,后来看别人代码都很简单,说是根号下德尔塔一定是整数,找了几个大神,也没解释出所以然,后来又看到另一种方法,跟我第一次的差不多,试着敲了一遍,就过了,真神奇!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
__int64 p[10000010][2],q[10000010][2];
int main()
{
__int64 i,j,m,a,b,c,z,x;
scanf("%I64d",&m);
while(m--)
{
scanf("%I64d%I64d%I64d",&a,&b,&c);
int flag=0;
for(i=1;i*i<=a;i++)
{
if(a%i==0)
{
z=a/i;
for(j=1;j*j<=c;j++)
{
if(c%j==0)
{
x=c/j;
if(i*j+z*x==b||i*x+j*z==b)
{
flag=1;
break;
}
}
}
}
if(flag)
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}