Time Limit: 1000MS | Memory Limit: 65536KB | 64bit IO Format: %I64d & %I64u |
Description
Jam has a math problem. He just learned factorization.
He is trying to factorize ax^2+bx+c into the form of pqx^2+(qk+mp)x+km=(px+k)(qx+m) .
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 ax^2+bx+c into the form of pqx^2+(qk+mp)x+km=(px+k)(qx+m) .
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
T
, means there are
T(1 \leq T \leq 100 )
cases
Each case has one line,the line has 3 numbers a,b,c (1 \leq a,b,c \leq 100000000)
Each case has one line,the line has 3 numbers a,b,c (1 \leq a,b,c \leq 100000000)
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)$
Source
BestCoder Round #70
代码:
#include<cstdio>
#define LL long long
void solve()
{
LL a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
LL i,j;
int ga=0,gb=0;
int a1[35000],a2[35000],b1[35000],b2[35000];
for (i=1;i*i<=a;i++)
if (a%i==0)
{
a1[ga]=i;
a2[ga++]=a/i;
}
for (i=1;i*i<=c;i++)
{
if (c%i==0)
{
b1[gb]=i;
b2[gb++]=c/i;
}
}
LL aa,bb;
for (i=0;i<ga;i++)
for (j=0;j<gb;j++)
{
aa=a1[i]*b1[j];
bb=a2[i]*b2[j];
if (aa+bb==b||aa-bb==b||bb-aa==b||-aa-bb==c)
{
printf("YES\n");
return;
}
aa=a1[i]*b2[j];
bb=a2[i]*b1[j];
if (aa+bb==b||aa-bb==b||bb-aa==b||-aa-bb==c)
{
printf("YES\n");
return;
}
}
printf("NO\n");
return ;
}
int main()
{
int t;scanf("%d",&t);
while (t--)
{
solve();
}
return 0;
}