#include<stdio.h>
long long int pa(long long int x) {
long long int ans = 0;
for (long long int i = 2; (i * i * i) <= x; i++) {
ans += (x / (i * i * i));
}
//printf("%lld\n", ans);
return ans;
}
int main(){
long long int m;
while (~scanf("%lld", &m)){
long long int l = 8;
long long int r = 1e16;
long long int cnt = 0;
int flag = 0;
cnt = 0;
flag = 0;
long long int mid ;
while (l <= r) {
mid = (l + r) / 2;
cnt = pa(mid);
if (cnt < m) {
l = mid + 1;
}
if (cnt > m) {
r = mid - 1;
}
if (cnt == m) {
flag = 1;
while (1) {
mid--;
cnt = pa(mid);
if (cnt != m) {
break;
}
}
}
if (flag) break;
}
//printf("%d", flag);
if (flag) printf("%lld\n", mid + 1);
else printf("-1\n");
}
return 0;
}先假定有x这个数,在算出这个数之前有多少组看是否满足题意 进行二分
这是我首次做二分的题 感觉二分是真的快乐

京公网安备 11010502036488号