解析:
因为a,b都是整数,所以最后可以将满足条件的b化简成
b=2*k*(2*k*k+1) k=1,2,3,.....
因为n最大可以到10^19次方
所以要用usigned long long(0-2^128-1)
最后直接用一个STL库里面的函数来二分查找满足条件的值点击打开链接
ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。
ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于值val的位置。
这题也有用大数模板加分块过的。。。但本人没有试过。。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef unsigned long long ull;
const int MAXN = 1400000 + 1