【hdu】5974 A Simple Math Problem
阿新 • • 發佈:2018-12-18
題目大意:
給出 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 就可以求出 lcm 了,變相的也就求出了 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; }