HDU5974 A Simple Math Problem---数论--转化解方程
Posted kimsimple
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU5974 A Simple Math Problem---数论--转化解方程相关的知识,希望对你有一定的参考价值。
感谢:http://blog.csdn.net/mirror58229/article/details/63685884
题意:x+y=a lcm(x,y)=b 求x,y
12WCases + b 10^9 + a 10^4
所以肯定不是枚举……肯定是公式题
接下来就是转化
x+y=a
x*y/gcd(x,y)=b
令gcd(x,y)=c
x=i*c,y=j*c
i*c+j*c=a
c*i*j=b
c*(i+j)=a
c*i*j=b
因为i j互质 所以gcd(a,b)=c=gcd(x,y) 【最重要的条件】
所以一开始就能得到c值,剩下就是求根
i+j=a/c
i*j=b/c
i+b/(c*i)=a/c
c*i2-a*i+b=0
a.b.c已知二元一次方程组求根 小的那个为i 大的为j
最后因为求根时整除可能会出现小数,这是不满足题意的 ,丢掉这种情况即可
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; typedef long long ll; ll gcd(ll a,ll b) { return b==0?a:gcd(b,a%b); } int main() { ll a,b; while(scanf("%lld%lld",&a,&b)!=EOF) { ll c=gcd(a,b); ll d=a*a-4*b*c; if(d<0) { printf("No Solution\n"); continue; } ll i=(a-sqrt(d))/2/c; ll j=a/c-i; ll x=c*i; ll y=c*j; if(x*y/c==b) printf("%lld %lld\n",x,y); else printf("No Solution\n"); } }
以上是关于HDU5974 A Simple Math Problem---数论--转化解方程的主要内容,如果未能解决你的问题,请参考以下文章
HDU - 5974 A Simple Math Problem (数论 GCD)
hdu 5974 A Simple Math Problem(数学题)
HDU 5974 A Simple Math Problem 数学题
HDU5974 A Simple Math Problem---数论--转化解方程
HDU 5974 A Simple Math Problem ——(数论,大连区域赛)
HDU 5974 A Simple Math Problem(数学解方程)——2016ACM/ICPC亚洲区大连站-重现赛(感谢大连海事大学)