题目大意
每次询问给出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
",2*(long long)sqrt(l/g)*g,g+l);
}return 0;
}