CUIT-ACM 2017-01-14 新生训练赛I题菜鸟见解
2017-01-15 本文已影响0人
Anxdada
题意给两个数a,b,叫你求是否存在这样x,y两个数使得满足x+y=a,LCM(x,y)=b;然后就简单了,解两个方程就是了。坑面在于尽量用long long(不过好像这道题用int 也能过),还有就是开△(delta)=b^2-4ac根号时,要保证开出来是个整数(因为会自动取整)就要用到一些小技巧,具体请看代码,如果不能保证是整数则会WA的。(我就是没想到这点,找了好久).
#include<cstdio>
#include<cmath>
int gcd(int x,int y){
return y==0?x:gcd(y,x%y);
}
int main()
{ long long a,b,x,y,s;
while(scanf("%lld %lld",&a,&b)!=EOF){
b*=gcd(a,b);
s=sqrt(a*a-4*b);
y=(a+s)/2;
x=a-y;
if(s>=0 && s*s==a*a-4*b )//最大的坑点就是要看判别式△(delta)=b^2-4ac是否看出来还是整数,如果不是整数就不行,因为它会自动取整.
printf("%lld %lld\n",x,y);//怎样判断的方法就是s*s==a*a-4*b.
else
printf("No Solution\n");
}
}