hdu 5615 Jam's math problem

来源:互联网 发布:苹果付费画图软件 编辑:程序博客网 时间:2024/06/06 17:24

Jam's math problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 881    Accepted Submission(s): 423


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(1T100) cases 

Each case has one line,the line has 3 numbers a,b,c(1a,b,c100000000)
 

Output
You should output the "YES" or "NO".
 

Sample Input
21 6 51 6 4
 

Sample Output
YESNO
Hint
The first case turn $x^2+6*x+5$ into $(x+1)(x+5)$
 

Source
BestCoder Round #70
 

Recommend
hujie   |   We have carefully selected several similar problems for you:  5644 5643 5642 5641 5640 

/* 题目大意:判断是否可以把  ax^2 + bx + c 转化成 pqx^2 + (qk + mp)x + km = (px+k)(qx+m) 由题目条件可得:p,q,k,m>0   a,b,c>0   那么函数的开口向上,对称轴在负半轴所以可以讨论 b^2 - 4ac 大于等于0还是小于0的情况了注意p,q,k,m不能为无理数   所以sqrt( b^2 -4ac )必须为整数 什么叫因式分解:把一个多项式在一个范围(如有理数范围内分解,即所有项均为有理数)化为几个最简整式的积的形式。 */ #include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cmath>using namespace std;int  main(){__int64 sum,a,b,c;//__int64 t;//__int64 k;scanf("%I64d",&t);//while(t--)//{scanf("%I64d%I64d%I64d",&a,&b,&c);sum=b*b-4*a*c;if(sum<0)printf("NO\n");else if(sum>=0){k=sqrt(sum);if( (k*k)==sum ){printf("YES\n");}elseprintf("NO\n");}}return 0;}

下面这个是方法二: 枚举的方法

#include<cstdio>#include<cstring>#include<iostream>#include<cmath>using namespace std;int a,b,c;int p[22000],k[22000];int cntp,cntk;int q,m;void init(){int i,j;cntp=0;cntk=0;for(i=1;i<=(int)(sqrt(a));i++){if(a%i==0){p[++cntp]=i;//p[++cntp]=a/i; 这步可以省略,可以举个例子来分析下,比如a=12 , c=6  ,可以证明出p[] 和 k[] 可以省略一个//这样可以节省点时间 }}for(j=1;j<=(int)(sqrt(c));j++){if(c%j==0){k[++cntk]=j;k[++cntk]=c/j;}}return ;}void get_answer(){int i,j;for(i=1;i<=cntp;i++){for(j=1;j<=cntk;j++){q=a/p[i];m=c/k[j];if(q*k[j]+m*p[i]==b){printf("YES\n");return ;}}}printf("NO\n");return ;}int main(){int t;scanf("%d",&t);while(t--){scanf("%d%d%d",&a,&b,&c);init();get_answer();}return 0;}




0 0
原创粉丝点击