Jam's math problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1353 Accepted Submission(s): 610
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
NO
Hint
The first case turn $x^2+6*x+5$ into $(x+1)(x+5)$
Source
Recommend
#include <map> #include <set> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <iostream> #include <stack> #include <cmath> #include <vector> #include <cstdlib> //#include <bits/stdc++.h> #define space " " using namespace std; //typedef long long LL; typedef __int64 Int; typedef pair<int,int> paii; const int INF = 0x3f3f3f3f; const double ESP = 1e-5; const double Pi = acos(-1); const int MOD = 1e9+5; const int MAXN = 1e5 + 10; Int a, b, c; int main() { int T; cin >> T; while (T--) { cin >> a >> b >> c; bool flag = false; if (b*b < 4*a*c) { cout << "NO" << endl; } else { Int sa = sqrt(a), sc = sqrt(c); for (int i = 1; i <= sa; i++) { if (a%i) continue; for (int j = 1; j <= sc; j++) { if (c%j == 0) { Int x = a/i, y = c/j; if ((i*j + x*y) == b || (i*y + j*x) == b) { flag = true; break; } } } if (flag) break; } if (flag) cout << "YES" <<endl; else cout << "NO" << endl; } } return 0; }