hdu 5974

x+y=a , lcm(x,y)=b        有解 输出x,y

 看了一篇博客 已经写的很清楚了  

http://blog.csdn.net/betwater/article/details/53055607

然后就是一个问题想不明白

为什么 i ,j 互质  i+j 和i*j 一定互质

在网上找到了证明:

若两个数互质,证明它们的和与它们的积互质

证明:设这两个数为p ,q
M=p+q N=pq
假设M,N不互质,则有:M=aN或 N=aM (a>1且a为自然数)
当M=aN时,
p+q=apq
p= q(ap-1)
p/q=ap-1
因为p,q互质,所以p/q为1或非整数
当p/q=1时,ap=2(不符)
当p/q为非整 数时 ,ap-1为整 数 ,矛盾即M不等于aN
同理可证N不等于aM
所以 M,N互质

然后就是解个方程了

#include<bits/stdc++.h>
using namespace std;
int gcd(int x,int y)
{
     return x%y==0?y:gcd(y,x%y);
}
int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        int c = gcd(a,b);
        b/=c;
        a/=c;
        int g = sqrt(a*a*1.0 - 4*b);
   //     printf("%d %d %d %d\n",a,b,g,c);
        if(g*g==a*a - 4*b)
        {
            int x1 =  a+g;
            if(x1%(2)==0)
            {
                int x2 = a-g;
                 if(x1>x2)
                    swap(x1,x2);
                if(x2%(2)==0)
                {
                    printf("%d %d\n",x1/2*c,x2/2*c);
                }
                else
                {
                    printf("No Solution\n");
                }
            }
            else
            {
                printf("No Solution\n");
            }
        }
        else
        {
            printf("No Solution\n");
        }
    }
}

扫描二维码关注公众号,回复: 2116175 查看本文章

猜你喜欢

转载自blog.csdn.net/theflowerofac/article/details/53084289