Jam's math problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 298 Accepted Submission(s): 160
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.
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)
Output
You should output the "YES" or "NO".
Sample Input
Sample Output
YES
NO
Hint
The first case turn $x^2+6*x+5$ into $(x+1)(x+5)$ 题意:查看能不能分解那个二元一次方程 思路:暴力枚举就好了,开始没想到这样能过就胡乱写了一个。。。。 ac代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#define MAXN 1010000
#define LL long long
#define ll __int64
#define INF 0xfffffff
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
//head
int main()
{
int t;
ll a,b,c,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%I64d%I64d%I64d",&a,&b,&c);
int bz=0;
for(i=1;i*i<=a;i++)
{
if(a%i)
continue;
for(j=1;j*j<=c;j++)
{
if(c%j)
continue;
if(i*j+(a/i)*(c/j)==b||i*(c/j)+j*(a/i)==b)
{
bz=1;
break;
}
}
if(bz)
break;
}
if(bz)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}