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)$
题解:对于一个一元二次方程,给出系数啊,a,b,c,问是否可以将该方程因式分解,其中的条件是pq=a,mk=c,枚举p,q,k,m,之后判定p*k+q*m 或者p*m+q*k是否与b相同,相同则是YES,否则则是NO,注意枚举过程中要枚举整数。
AC代码:
#include<stdio.h>
#include<math.h>
int main()
{
int n;
int a,b,c,p,q,m,k;
scanf("%d",&n);
while(n--)
{
scanf("%d%d%d",&a,&b,&c);
int mark=0;
for(int i=1;i<=sqrt(a*1.0);i++)
{
if(a%i==0)
{
p=i;
q=a/p;
for(int j=1;j<=sqrt(c*1.0);j++)
{
if(c%j==0)
{
k=j;
m=c/k;
if((p*m+q*k)==b||(q*m+p*k)==b)
{
mark=1;
break;
}
}
}
}
if(mark==1) break;
}
if(mark==1)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}