题目大意

每次询问给出g,l,有\(a*b = g*l = n\),且\(a,b\)均为\(g\)的倍数.求\(a+b\)的最小值和\(a-b\)的最大值.

题解

因为\(a,b\)均为\(g\)的倍数,所以我们另\(a = k_1*g,b = k_2*g\)那么我们有:
\(a*b = k_1*k_2*g^2 = g*l\)\(k_1*k_2 = \frac{l}{g}\)
并且我们有\(a+b = (k_1+k_2)*g\)所以我们发现
\(a+b\)的最小值在\(k_1 = k_2\)时取到,\(a+b\)的最大值在\(k_1 = 1,k_2 = g\)时取到.
化简一下就会发现最大值其实就是\(g+l\)

#include <cmath>
#include <cstdio>
using namespace std;
int main(){
    int T;scanf("%d",&T);
    long long g,l;
    while(T--){
	scanf("%lld%lld",&g,&l);
	printf("%lld %lld\n",2*(long long)sqrt(l/g)*g,g+l);
    }return 0;
}

相关文章:

  • 2021-06-22
  • 2021-06-15
  • 2022-12-23
  • 2022-01-24
  • 2021-11-15
  • 2021-09-10
  • 2022-01-20
  • 2021-11-17
猜你喜欢
  • 2021-08-05
  • 2021-08-02
  • 2021-06-07
  • 2021-07-14
  • 2021-09-01
  • 2022-12-23
  • 2021-10-26
相关资源
相似解决方案