quadratic equation
Time Limit: 2000MS
Memory Limit: 131072KB
Problem Description
With given integers a,b,c, you are asked to judge whether the following statement is true: "For any x, if a⋅+b⋅x+c=0, then x is an integer."
Input
The first line contains only one integer T(1≤T≤2000), which indicates the number of test cases.
For each test case, there is only one line containing three integers a,b,c(−5≤a,b,c≤5).
Output
or each test case, output “YES
” if the statement is true, or “NO
” if not.
Example Input
3 1 4 4 0 0 1 1 3 1
Example Output
YES YES NO
可恶 比赛的时候没A掉 离散数学中的蕴含式 只有当前件成立后件不成立时输出 "NO" 其他情况都输出 "YES" 本题就是 当方程有解并且解不为整数时输出 "NO" 其他情况输出 "YES"
1 1 1
1 0 0
0 0 1
0 1 1
比赛的时候试了各种情况 唯独没判断sqrt(b*b-4*a*c)是否为整数
AC代码:
#include<stdio.h>
#include<cmath>
int main ()
{
int t;
scanf ("%d",&t);
while (t--){
int a,b,c;
scanf ("%d%d%d",&a,&b,&c);
if (a==0&&b==0&&c==0){
printf ("NO\n");
continue;
}
if (a==0){
if(b!=0&&c!=0){
if((c%b)!=0){
printf ("NO\n");
continue;
}
}
}
else if (a!=0){
float temp=(b*b)-(4*a*c);
if (temp>=0){
if ((int)sqrt(temp)!=sqrt(temp)){
printf ("NO\n");
continue;
}
else{
if ((-1*b-(int)sqrt(temp))%(2*a)!=0||(-1*b+(int)sqrt(temp))%(2*a)!=0){
printf ("NO\n");
continue;
}
}
}
}
printf ("YES\n");
}
return 0;
}