I - A Simple Math Problem

這是個數論題,題目給出兩個正整數a,b;
讓我們尋找兩個正整數X,Y,其滿足X+Y=a,LCM(X,Y)=b;
這個題可以用解方程做;
因為XY=LCM(X,Y)GCD(X,Y);LCM(X,Y)=b;GCD(X,Y)=GCD(a,b);
所以XY=b
GCD(a,b);
(z-x)(z-y)=zz-(x+y)z+xy;
△t
△t=(x+y)^2-4xy;
z1=((x+y)+△t)/2 , z2=((x+y)-△t)/2 ;
顯然當△t<0方程無解,△t不是整數時,x,y也不是整數,所以這;兩種時輸出no solution;
其他情況直接輸出z1,z2;
還有因為 integers a(1≤a≤2*104),b(1≤b≤109),所以變量 a,b,x,y,t 要用long long聲明;

#include<stdio.h>
#include<math.h>
int gcd(int a,int b)
{
    return b==0? a:gcd(b,a%b);
}
int main()
{
    long long  a,b,x,y,t;
    while(~scanf("%lld%lld",&a,&b))
    {
        b=gcd(a,b)*b;
        if(a*a-4*b<0)
        {
            printf("No Solution\n");
        }
        else
        {
            t=sqrt(a*a-4*b);
            x=(a+t)/2;
            y=x-t;
            if(t*t==a*a-4*b)
            {
                printf("%lld %lld\n",y,x);
                continue;
            }
            else
            {
                printf("No Solution\n");
            }
        }   
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容