Description
Input
第一行输入一个整数T,表示数据组数。
每组数据输入一个整数n。
1 <= T <= 100000
0 <= n <= 10^19
保证结果存在
Output
输出一个整数。
Sample Input
3
2
6
100
Sample Output
6
6
114
解析
因为a,b都是整数,而且b^2=2*a*(a+1)^2<=1e19,所以a<2*1e6,同时b=sqrt(2*a)(a+1),可以用i枚举a,2*a=4*i*i ->b=2*i*(2*i*i+1)
因为数据范围极大,所以要用%llu
代码
#include<bits/stdc++.h>
#define MAX 1400005
using namespace std;
unsigned long long ans[MAX],i;
void solve()
{
for(i=1;i<MAX;i++)
{
ans[i]=2*i*(2*i*i+1);
}
}
int main()
{
int T;
unsigned long long n;
scanf("%d",&T);
solve();
while(T--)
{
scanf("%llu",&n);
int temp=lower_bound(ans,ans+MAX,n)-ans;
printf("%llu\n",ans[temp]);
}
return 0;
}