题意:给你上面一个公式,给你a,b,k
让你求它的在K里面最大的n的值
二分查找,二分查询的当前值mid可以通过除法来实现看看是不是大于0或者小于0来找出这个值来。
参考博客:https://blog.csdn.net/zhangritian666/article/details/80560305
贴上代码:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll a,b,k;
int num(ll x){
for(int i=0;i<=64;i++){
if((1ll<<i)>=x){
return i;
}
}
}
bool check(ll n){
ll ret=k;
for(int i=0;i<a;i++){
if(ret/n<=0)
return false;
else
ret/=n;
}
int len=num(n);
if(len==0)
return true;
for(int i=0;i<b;i++){
if(ret/len<=0)
return false;
ret/=len;
}
return true;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%llu%llu%llu",&a,&b,&k);
ll L=1,R=1e18,mid;
while(L<=R){
mid=(L+R)/2;
if(check(mid)){
L=mid+1;
}else{
R=mid-1;
}
}
printf("%llu\n",R);
}
return 0;
}