Problem Description
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*104),b(1≤b≤109),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
化简得(a-x)* x=b * gcd(a-x,x)。然后一元二次方程组求解就好了
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
ll n,m;
ll x,y;
ll b,c,t;
while(~scanf("%I64d%I64d",&n,&m)){
ll z=__gcd(n,m);
c=m/z;
b=n/z;
int flag=0;
ll data=sqrt(b*b-4*c);
if(data*data==b*b-4*c){
t=(b-data)/2;
if(t*2==b-data) flag=1;
}
if(flag){
cout<<t*z<<" "<<n-t*z<<endl;
}else{
cout<<"No Solution"<<endl;
}
}
}