A Simple Math Problem
题目大意:
给出 A 和 B 。
A = x + y;B = lcm( x, y)。
求 x 和 y 。
题解:
直观思路,只要求出 x*y 我们就可以直接解方程了。
易知 x*y = lcm * gcd。
但是 x 和 y 我们都不知道,怎么求 gcd 呢?
我们设 gcd( x, y ) = n ,x = a*n ,y = b*n ,那么:
A = a*n + b*n = (a+b) * n
B = lcm( x, y) = (a*n * b*n) / n = a * b * n。
根据 A 和 B 就可以求出 gcd了,变相的也就求出了 x*y 。
剩下的就是解方程的问题了。
代码:
#include <iostream>
#include <cmath>
using namespace std;
int gcd(int a, int b){
return b==0? a:gcd(b, a%b);
}
int main(){
int a, b;
long long num = 0;
while(~scanf("%d %d", &a, &b)){
num = gcd(a, b);
num *= b;
if(a*a-4*num<0)
cout << "No Solution" << endl;
else{
int qrt = sqrt(a*a-4*num);
if(qrt*qrt!=a*a-4*num){
cout << "No Solution" << endl;
continue;
}
int x = (a-qrt)/2;
int y = a-x;
cout << x << ' ' << y << endl;
}
}
return 0;
}