找整数(NHOI2022xj6)

描述

给出一个整数n,小明想找到一个最小的整数x,使得x同时满足如下条件:

1.x>=n。

2.存在两个非负整数a和b,使得满足x = a*a*a + a*a*b + a*b*b + b* b*b。

请你帮帮忙。

输入

一行,一个整数n,0<=n<=10^18。

输出

一个整数,表示满足条件的最小x。

用例输入 1 

9

用例输出 1 

15

提示

【样例解释】

当a=2, b=1时,x=15,满足x>=9,且x=15已经是最小的满足条件的了。

话不多说,代码奉上

#include<bits/stdc++.h>
#define happy using namespace std;
#define end return 0;
#define main int main()
#define ll long long
#define sc scanf
#define pr printf

happy
ll n,k,mi=1e18;
ll find(ll x,ll y)
{
	return x*x*x+x*x*y+x*y*y+y*y*y;
}
main
{
	sc("%lld",&n);
	for(ll a=0;a<=1e6;a++)
	{
    	ll L=-1,R=1e6+1,mid;
		while(L+1<R)
		{
			mid=(L+R)/2;
			k=find(mid,a);
			if(k>=n)R=mid;
			else L=mid;
		}
        mi=min(mi,find(R,a));
	}
	pr("%lld",mi);
	
	end
}

仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值