已知a+b 和 a*b
所以由此可以直接表示。
输入x,y 所以gcd(x,y)==gcd(a,b)
所以 联立 a+b=x
a*b/gcd(x,y)=y
最终 得出来一个二元一次方程。
首先 方程要有解,然后判断是否成立。
#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL gcd(LL a,LL b){
if(b==0) return a;
else return gcd(b,a%b);
}
int main(){
LL x,y;
while(~scanf("%lld%lld",&x,&y)){
LL l=gcd(x,y);
if(x*x<4*y*l){
printf("No Solution\n");
continue;
}else{
LL ans=(x+sqrt(x*x-4*y*l))/2;
LL cnt=x-ans;
if(cnt+ans==x&&cnt*ans/gcd(cnt,ans)==y){
printf("%lld %lld\n",cnt,ans);
}
else
printf("No Solution\n");
}
}
return 0;
}