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
Input
Input includes multiple sets of test data.Each test data occupies one line,including two positive integers a(1≤a≤2*10^4),b(1≤b≤10^9),and their meanings are shown in the description.Contains most of the 12W test cases.
Output
For each set of input data,output a line of two integers,representing X, Y.If you cannot find such X and Y,output one line of "No Solution"(without quotation).
Sample Input
6 8
798 10780
Sample Output
No Solution
308 490
#include <stdio.h>
#include <cmath>
#include<algorithm>
#include <iostream>
using namespace std;
long long gcd(long long x,long long y)
{
if (x==0) return y;
return gcd(y%x, x);
}
int main()
{
long long a,b,d,x,y,k,p,tmp;
while(~scanf("%lld%lld",&a,&b))
{
k=gcd(a,b);
d=a*a-4*k*b;
if(d < 0)//无解情况1
{
printf("No Solution\n");
continue;
}
p = sqrt(d);
if(p*p != d|| (a+p)%2!=0 )//无解情况2、3
{
printf("No Solution\n");
continue;
}
else
{
x=(a+p)/2;
y=a-x;
if(x > y)
{
tmp=x;
x=y;
y=tmp;
}
printf("%lld %lld\n",x,y);
}
}
return 0;
}