E-Math

在这里插入图片描述

在这里插入图片描述

比赛的时候,看的一脸懵,,题目那个表达式是干啥的,也不是等式,,看到题解公式的时候才知道是把它写成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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值