I - A Simple Math Problem(解题报告)
第一次写,一道比较简单的题,乍一看觉得非常简单,但暴力枚举后就会TLE,所以就需要另辟蹊径,仔细观察题,我们可以通过数学方法来简化。输入的两个数n,m,然后设结果a,b。设a,b的最大公约数为g,然后设g*k1 = a,g*k2=b,g*k1+g*k2=n,因为m=(a*b)/g,所以m=g*k1*k2.。由此可得出g也是m和n的最大公约数,所以g为已知量,所以可以列出方程g*k1^2-n*k1+m=0,所以转化成根的存在问题,但是要注意的是要考虑根要为整数。
接下来是代码:
#include#includeint gcd(int a,int b){int temp;if(aans2)
{
ans = ans1;
ans1 = ans2;
ans2 = ans;
}
if(ans2<=0)
{
flag = 1;
}
if(flag||ans1%2==1||ans2%2==1)
{
printf("No Solution\n");
}
else
{
printf("%d %d\n",ans1/2,ans2/2);
}
}
return 0;
}