http://acm.hdu.edu.cn/showproblem.php?pid=5974
一个数学题
X+Y=a
LCM(X,Y)=b
因为 LCM(X,Y)=(X*Y)/GCD(X,Y)
所以 X*Y=b*GCD(X,Y)
因为GCD(X,Y)=GCD(a,b)
所以只要联立方程组
X+Y=a
X*Y=b*GCD(a,b)
求解即可
代码如下:
#include <stdio.h>
#include <cmath>
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main (){
int a,b;
while (scanf ("%d%d",&a,&b)!=EOF){
int n=gcd(a,b);
int flag=a*a-4*b*n;
if(flag<0){
printf ("No Solution\n");
continue;
}
int m=sqrt(flag);
if(m*m!=flag||(a-(int)sqrt(flag))%2!=0){
printf ("No Solution\n");
continue;
}
int x=(a-sqrt(flag))/2;
int y=a-x;
printf ("%d %d\n",x<y?x:y,x>y?x:y);
}
return 0;
}