版权声明:版权归Ordinarv所有 https://blog.csdn.net/ordinarv/article/details/82257566
题目大意
给出一个n求k k满足k^k<=n;
题目分析
用快速幂打表打出k^k,实际发现k==16时 爆longlong。
二分查找k即可
AC Code
#include<bits/stdc++.h>
typedef long long ll;
const int INF=0x3f3f3f3f;
const int maxn=1e5+5;
const int maxx=16;
using namespace std;
ll a[maxn];
ll q_pow(ll x,ll n){
ll base=x,ans=1;
while(n){
if(n&1) ans*=base;
base*=base;
n>>=1;
}
return ans;
}
void init(){
for(int i=1;i<maxx;i++){
a[i]=q_pow(i,i);
}
}
int main(){
init();
ll n;
while(~scanf("%lld",&n)){
int r=15,l=1,mid;
while(l<=r){
mid=(r+l)/2;
if(a[mid]>n) r=mid-1;
else l=mid+1;
}
printf("%d\n",l-1);
}
return 0;
}