HDU 2092 整数解

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2092

题       意:给你两个数n,m问是否有x,y满足x+y==n&&x*y==m。

思      路:

              1.直接在取值范围内暴力枚举即可。

    代码如下:

#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <cmath>
#include <algorithm>
int main()
{
    int n, m;
    while( scanf ( "%d %d", &n, &m ) != EOF )
    {
        if( n == 0 && m == 0 ) break;
        int i, f = 0;
        for( i = -10000; i <= 10000; i ++ )
        {
            if( i * ( n - i ) == m )
            {
                f=1;break;
            }
        }
        if( f ) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}
                2 :将x+y=n与x*y=m化为一个公式, x+m/x=n即x*x+n*x+m=0,判断这个式子是否有实数解且实数解为整数。

                 即要满足s = n*n-4*m>=0与(n±√s)/2为整数

                即(n±√s)/2为整数要满足两个条件:

                         ①(int)√num*(int)√num = num,则√num为整数

                    ②若(n±√num)%2==0,则(n±√num)/2为整数

 代码如下:

#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <cmath>
#include <algorithm>
int main()
{
    int n, m;
    while( scanf ( "%d %d", &n, &m ) != EOF )
    {
        if( n == 0 && m == 0 ) break;
        int s = n*n - 4*m;
        if( s >= 0 && (int)sqrt(s*1.0)*(int)sqrt(s*1.0) == s && (int)(n + sqrt(s*1.0))%2==0 && (int)(n - sqrt(s*1.0)) %2==0 )
            printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值