Jam's math problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1313 Accepted Submission(s): 583
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
hujie
题目大意:给一个a、b、c,其中a、b、c是a*x^2+b*x+c中的abc,问所给的abc能否使用十字相乘法。
解题思路:a=pq;b=qk+mp;c=km。暴力枚举来拆分a、c,拆开后看是否满足b==qk+mp(即pk+qm==b||pm+qk==b)。
代码如下:
#include <cstdio>
#define LL long long
#define sc(x) scanf("%lld",&x)
int main()
{
LL t;
sc(t);
LL a,b,c;
while(t--)
{
sc(a);
sc(b);
sc(c);
LL flag=0;
for(LL i=1;i*i<=a;i++)//节省时间,因为sqrt以后的都重复了
{
if(a%i!=0)
continue;
for(LL j=1;j*j<=c;j++)//节省时间,因为sqrt以后的都重复了
{
if(c%j!=0)
continue;
if(((i*j+(a/i)*(c/j))==b)||(i*(c/j)+j*(a/i)==b))
{
flag=1;
break;
}
}
if(flag==1)
break;
}
if(flag==0)
{
printf("NO\n");
}
else
{
printf("YES\n");
}
}
return 0;
}