hdu 5974 A Simple Math Problem

来源:互联网 发布:ubuntu更换源 编辑:程序博客网 时间:2024/05/29 02:24

http://acm.hdu.edu.cn/showproblem.php?pid=5974



给出x,y,求a,b使得a+b=x,且a和b的最小公倍数是y。
已知a+b=x,a*b/gcd(a,b)=y.并且还知道gcd(a,b)=gcd(x,y),则可以得到二元方程组,解出a和b即可,当然也可能不存在解,时间是O(1),如果是暴力做必超时。





#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#include<iomanip>using namespace std;int gcd(int a,int b){return b?gcd(b,a%b):a;}int main(){int x,y;while(scanf("%d%d",&x,&y)!=EOF){int s=gcd(x,y);bool flag=0;int res=x*x-4*y*s;if(res<0){cout<<"No Solution"<<endl;continue;}else{int t=sqrt(res*1.0);if(t*t==res&&(x-t)%2==0){cout<<(x-t)/2<<" "<<x-(x-t)/2<<endl;}else if(t*t==res&&(x+t)%2==0){cout<<(x+t)/2<<" "<<x-(x+t)/2<<endl;}else{cout<<"No Solution"<<endl;}}}return 0;}



原创粉丝点击