HDU——5974 A SIMPLE MATH PROBLEM

题目简介

Given two positive integers a and b,find suitable X and Y to meet the conditions:
X+Y=a
Least Common Multiple (X, Y) =b
a(1≤a≤2*104),b(1≤b≤109)。

样例输入

6 8
798 10780

样例输出

No Solution
308 490

题目分析

我借鉴别人的方法如下(可能叙述不好):
1.记GCD(X,Y) = l。
2.记X = i×l , Y = j×l。
3.易知 i×l + j×l = a , i×j×l = b 。
4.因为i,j是两个互质的数,可证明他们的和与积互质。(这里不给出证明)
5.既然i+j和i×j互质了,那么GCD(a,b)= GCD(X,Y) = l。
6.既然l可求那么只用联立
i + j = a/l
i×j = b/l

#include<cstdio>
#include<cmath>
using namespace std;
#define LL long long

LL gcd(LL x,LL y)
{
    if(y==0) return x;
    else return(gcd(y,x%y));
}

int main()
{
    LL a,b;
    while(scanf("%lld%lld",&a,&b) != EOF)
    {
        LL l = gcd(a,b);
        LL n = b*l;
        LL det = a*a - 4*n;
        LL haha = sqrt(det);
        if(det < 0)
        {
            printf("No Solution\n");continue;
        }
        if(haha*haha == det && (a - haha)%2 == 0)
        {
            LL y = (a-haha)/2 ;
            LL x =  a - y;
            printf("%lld %lld\n",y,x);
        }
        else
        {
            printf("No Solution\n");continue;
        }

    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,767评论 0 33
  • 一年级语文上册生字表 生字表一(共400字) 啊(ā)爱(ài)安(ān)岸(àn)爸(bà)八(bā)巴(bā)...
    meychang阅读 2,855评论 0 6
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,894评论 0 2
  • 一问题层面先从今天在项目当中遇到的一个问题开始:项目采用的flask_sqlalchemy ,因为需求的原因,在m...
    __XY__阅读 875评论 0 0
  • 文|白梨安 图|似舞 我呸。说的跟真的一样。要是我,我才不搞这些虚头巴脑的,直接飞过去找她呢。隔着屏幕说情话耍流氓...
    白梨安阅读 2,465评论 120 84