您的位置:首页 > 其它

hdoj--5615--Jam's math problem(数学)(交叉相乘)

2016-03-15 17:50 357 查看


Jam's math problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 861    Accepted Submission(s): 411


[align=left]Problem Description[/align]
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.
 

[align=left]Input[/align]
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)
 

[align=left]Output[/align]
You should output the "YES" or "NO".
 

[align=left]Sample Input[/align]

2
1 6 5
1 6 4

 

[align=left]Sample Output[/align]

YES
NO

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

 

[align=left]Source[/align]
BestCoder Round #70

我记得以前应该是这么做的,找出二次项系数跟常数项个子所有因子,然后组合,看是否可以组合产生一次项系数,,,本来以为会超时的,但是水过了 - - ||

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int a[10000+10],b[10000+10];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int A,B,C;
scanf("%d%d%d",&A,&B,&C);
int cnt1,cnt2;
cnt1=cnt2=0;
for(int i=1;i<=sqrt(A);i++)
if(A%i==0)
a[cnt1++]=i;

for(int i=1;i<=sqrt(C);i++)
if(C%i==0)
b[cnt2++]=i;

int f=false;
for(int i=0;i<cnt1;i++)
{
int p=a[i];
int q=A/a[i];
for(int j=0;j<cnt2;j++)
{
int k=b[j];
int m=C/b[j];
if(m*p+q*k==B)
{
f=true;
break;
}
if(p*k+q*m==B)
{
f=true;
break;
}
}
if(f) break;
}
if(f) printf("YES\n");
else printf("NO\n");
}
return 0;
}


 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: