hdu 5615 Jam's math problem

来源:互联网 发布:手机淘宝删除差评链接 编辑:程序博客网 时间:2024/06/07 04:45

D - Jam's math problem
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
Submit Status

Description

Jam has a math problem. He just learned factorization. 
He is trying to factorize $ax^2+bx+c$ into the form of $pqx^2+(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 \leq T \leq 100 )$ cases 

Each case has one line,the line has $3$ numbers $a,b,c (1 \leq a,b,c \leq 100000000)$
 

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)$          
 


题解:对于一个一元二次方程,给出系数啊,a,b,c,问是否可以将该方程因式分解,其中的条件是pq=a,mk=c,枚举p,q,k,m,之后判定p*k+q*m 或者p*m+q*k是否与b相同,相同则是YES,否则则是NO,注意枚举过程中要枚举整数。

AC代码:

#include<stdio.h>#include<math.h>int main(){    int n;    int a,b,c,p,q,m,k;    scanf("%d",&n);    while(n--)    {        scanf("%d%d%d",&a,&b,&c);        int mark=0;        for(int i=1;i<=sqrt(a*1.0);i++)        {            if(a%i==0)            {                p=i;                q=a/p;                for(int j=1;j<=sqrt(c*1.0);j++)                {                    if(c%j==0)                    {                        k=j;                        m=c/k;                        if((p*m+q*k)==b||(q*m+p*k)==b)                        {                            mark=1;                            break;                        }                    }                }            }            if(mark==1)  break;        }        if(mark==1)        {            printf("YES\n");        }        else        {            printf("NO\n");        }    }return 0;}



0 0
原创粉丝点击