Math
题解:
设x2 + y2=k*(xy+1),由韦达定理(固定x)可算出(x,kx-y)为其中一组可行解,打表明显可以得到$(x,x3 ) 也是其中一组解,然后记录排序,最后二分得到答案。注意使用——int128。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef __int128 ull;
vector<ull>v;
int main()
{
int t;
cin>>t;
for(ll i=2;i<=1e6;i++)
{
ull y=i*i*i;
ull x=i;
ull k=i*i;
v.push_back(y);
while(y<=1e18)
{
ull xx=y;
y=k*y-x;
x=xx;
if(y<=1e18)
{
v.push_back(y);
}
}
}
sort(v.begin(),v.end());
while(t--)
{
ll n;
cin>>n;
cout<<upper_bound(v.begin(),v.end(),n)-v.begin()+1<<endl;
}
}