思路:a,b,c都是10^9,直接相乘会爆int,直接判sqrt(b^2-4ac)是不是为大于等于0的整数即可
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
using namespace std;
#define maxn 100000
#define LL long long
int cas=1,T;
int main()
{
//freopen("in","r",stdin);
scanf("%d",&T);
while (T--)
{
LL a,b,c;
double ans = 0;
scanf("%I64d%I64d%I64d",&a,&b,&c);
LL delta = b*b - 4 * a*c;
LL k = 0;
bool ok = 1;
while ((k+1)*(k+1) <=delta)
++k;
ok = delta>=0 && k*k==delta;
puts(ok?"YES":"NO");
}
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
问题描述
Jam有道数学题想向你请教一下,他刚刚学会因式分解比如说,x2+6x+5=(x+1)(x+5) 就好像形如 ax2+bx+c => pqx2+(qk+mp)x+km=(px+k)(qx+m) 但是他很蠢,他只会做p,q,m,k为正整数的题目 请你帮助他,问可不可以分解
输入描述
第一行T,表示T(1≤T≤100)组数据。 接下来T组数据: 每组数据一行,一个三个整数a,b,c,一组数据一行 (1≤a,b,c≤100000000)
输出描述
对于每组数据,输出"YES"或者"NO".
输入样例
2 1 6 5 1 6 4
输出样例
YES NO
Hint
第一组数据可以分成(x+1)(x+5)=x2+6∗x+5