比赛的时候,看的一脸懵,,题目那个表达式是干啥的,也不是等式,,看到题解公式的时候才知道是把它写成k(xy + 1) = x^2 + y^2 ,然后根据韦达定理知道y1 + y2 = -b/a,就得出这个(x,kx - y),,在就是打表出来找到规律。。但是还是不明白题目中给的表达式,怎么就变成等式了。。数学没学好
(写代码时,不知道为什么我用vector直接报内存溢出)
AC代码:
// #include <iostream>
// #include <algorithm>
// #include <vector>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// vector<ll> ans;
ll ans[1010000];
int main(){
// ans.push_back(1);
ll cnt = 1;
ans[0] = 1;
ll x,y,k;
for(ll i = 2;i<=1e6;i++){
x = i,y = i*i*i,k = i*i;
while(1){
// ans.push_back(y);
ans[cnt++] = y;
if(y > (1e18+x)/k) break;
ll temp = k*y - x;
x = y;
y = temp;
}
}
// sort(ans.begin(),ans.end());//因为不保证有序
sort(ans,ans+cnt);
int t; scanf("%d",&t);
ll n;
while(t--){
scanf("%lld",&n);
// ll pos = upper_bound(ans.begin(), ans.end(), n) - ans.begin();
ll pos = upper_bound(ans, ans+cnt, n) - ans;
printf("%lld\n",pos);
}
}