Jam's math problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 182 Accepted Submission(s): 92
Problem 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
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
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)$
题意: ax^2+bx+c ==> qpx^2+(qk+mp)x+km == (px+k)*(qx+m) 给出a,b,c;问是否存在正整数p,q,
m,k。
题解: 枚举p,q,k,m啊,再判断(qk+mp)||(qm+pk)是否等于b就行了。 啊啊啊啊啊啊!!!!!! 这么简单我都没想到,没救了。。。。
代码如下:
#include<cstdio>
#include<cstring>
#include<cmath>
int main()
{
int t,i,j,a,b,c,q,p,k,m,flag;
scanf("%d",&t);
while(t--)
{
flag=0;
scanf("%d%d%d",&a,&b,&c);
for(i=1;i<=sqrt(a*1.0);++i)
{
if(a%i==0)
{
p=i;
q=a/p;
for(j=1;j<=sqrt(c*1.0);++j)
{
if(c%j==0)
{
k=j;
m=c/k;
if(k*q+m*p==b||k*p+m*q==b)
{
flag=1;
break;
}
}
}
}
if(flag)
break;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}