Jam's math problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1164 Accepted Submission(s): 537
Problem Description
Jam has a math problem. He just learned factorization.
He is trying to factorize ax2+bx+c into the form of pqx2+(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 ax2+bx+c into the form of pqx2+(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≤T≤100)
cases
Each case has one line,the line has 3 numbers a,b,c(1≤a,b,c≤100000000)
Each case has one line,the line has 3 numbers a,b,c(1≤a,b,c≤100000000)
Output
You should output the "YES" or "NO".
Sample Input
2 1 6 5 1 6 4
Sample Output
YES NOHintThe first case turn $x^2+6*x+5$ into $(x+1)(x+5)$
Source
Recommend
先脑补一下,一元二次方程组,还记得一元二次方程组的解法吗,要使两个方程组相同,只要使方程的解一下不就行了。
p
q
x2
+
(
q
k
+
m
p
)
x
+
k
m
=
(
p
x
+
k
)
(
q
x
+
m
),这个是因式分解,方程的两个解为-k/p,-m/q,方程的另一个解法,要使方程有解,b*b-4*a*c
>=0;要使两个方程的解相同,则b*b-4*a*c要能被完全开方。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
__int64 t,a,b,c,n,m;
int main()
{
scanf("%I64d",&t);
while(t--)
{
scanf("%I64d%I64d%I64d",&a,&b,&c);
n=b*b-4*a*c;
if(n<0)
{
printf("NO\n");
continue;
}
m=sqrt(n);
if(m*m==n)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}