思路:a+b=n,当a,b接近时,a*b最大,但本题是a b 的最大公倍数最大,所以除了从中间进行搜索外,还需要两数互质
代码:
#include <stdio.h>
#include <iostream>
#include <cstring>
#include <string.h>
#include <cmath>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
const int M=100005;
int main()
{
int t;
long long s,n;
scanf("%d",&t);
while(t--)
{
scanf("%I64d",&n);//要注意与s 范围一致,不然WA
if(n==2)
{
cout<<1<<endl;
continue;
}
if(n%2==0)
{
n/=2;
if(n%2==0)
s=(n-1)*(n+1);
else
s=(n-2)*(n+2);
}
else
{
n/=2;
s=n*(n+1);
}
printf("%I64d\n",s);
}
return 0;
}