题解
设
k
(
x
y
+
1
)
=
x
2
+
y
2
k ( x y + 1 ) = x^2 + y^2
k(xy+1)=x2+y2
根据韦达定理可得(x,kx-y)是一组解,且k为平方数
当
y
=
x
3
y =x^3
y=x3时,
(
x
,
y
)
(x,y)
(x,y)满足条件且此时
k
=
x
2
k = x^ 2
k=x2
所以我们只要枚举第一组解
(
x
,
x
3
)
(x,x^3)
(x,x3)并进一步计算更多的解
代码
#include<bits/stdc++.h>
using namespace std;
const ll MAXN=1e18;
int T;
long long n,m=0,v[5000010];
int main()
{
v[m++]=1;
for(long long i=2;i*i*i<=MAXN;i++)
{
long long x=i,y=i*i*i;
v[m++]=y;
while(y<=(MAXN+x)/i/i)
{
x=i*i*y-x;
swap(x,y);
v[m++]=y;
}
}
sort(v,v+m);
scanf("%d",&T);
while(T--)
{
scanf("%lld",&n);
printf("%lld\n",upper_bound(v,v+m,n)-v);
}
return 0;
}