hdoj 5974 A Simple Math Problem
2017-09-15 21:10
260 查看
题目链接:A Simple Math Problem
题目大意:给你一个a和b,现在要求x+y = a,lcm(x,y) = b,输出x,y
题目思路:数据范围太大,暴力不可解,我们假设s=gcd(x,y) 则 i∗s+j∗s=a,(i∗s∗j∗s)/s=b即(i+j)∗s=a,(i∗j)∗s=b,易知i,j互质,故i+j与i*j互质,所以gcd(a,b)==s,这样我们就求出了s,然后i,j两个未知数,两个方程,可解,考虑一下无解和delta的情况,然后就可出了,具体看代码
题目大意:给你一个a和b,现在要求x+y = a,lcm(x,y) = b,输出x,y
题目思路:数据范围太大,暴力不可解,我们假设s=gcd(x,y) 则 i∗s+j∗s=a,(i∗s∗j∗s)/s=b即(i+j)∗s=a,(i∗j)∗s=b,易知i,j互质,故i+j与i*j互质,所以gcd(a,b)==s,这样我们就求出了s,然后i,j两个未知数,两个方程,可解,考虑一下无解和delta的情况,然后就可出了,具体看代码
#include <map> #include <set> #include <cmath> #include <vector> #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; int main(){ ll a,b; while(~scanf("%lld%lld",&a,&b)){ ll x = a/__gcd(a,b); ll y = b/__gcd(a,b); if(x*x-4*y < 0) puts("No Solution"); else{ ll sq = sqrt(x*x-4*y); if(sq*sq != x*x-4*y) puts("No Solution"); else{ ll ans1 = x+sq; ll ans2 = x-sq; if(ans1 > ans2) swap(ans1,ans2); if(ans1%2 == 1) puts("No Solution"); else printf("%lld %lld\n",ans1/2*__gcd(a,b),ans2/2*__gcd(a,b)); } } } return 0; }
相关文章推荐
- hdoj 5974 A Simple Math Problem(数学)
- 【HDOJ5974】A Simple Math Problem(构造,解方程)
- HDU 5974 A Simple Math Problem (数学)
- HDU - 5974 A Simple Math Problem(简单数论)
- 【矩阵乘法】hdu hdoj 1757 A Simple Math Problem
- HDU 5974 && 2016ICPC大连 D: A Simple Math Problem
- HDU 5974 A Simple Math Problem
- HDU-5974-A Simple Math Problem
- hdoj 1757 A Simple Math Problem
- A Simple Math Problem HDU - 5974
- A Simple Math Problem (HDU - 5974)
- HDU 5974 A Simple Math Problem(数论)
- hdoj 1757 A Simple Math Problem(转化为矩阵+矩阵乘法)
- hdu 5974 A Simple Math Problem
- HDU 5974 A Simple Math Problem (数学)
- hdu 5974 A Simple Math Problem (数论思路)
- HDU - 5974 A Simple Math Problem(ICPC2016 大连现场,简单的数学推理)
- HDU 5974 A Simple Math Problem 2016大连区域赛
- hdu 5974 A Simple Math Problem
- ACM-ICPC Asia Regional Contest HDU 5974 A Simple Math Problem(数论)