D-A Math Problem(快速冪+打表二分)
阿新 • • 發佈:2018-11-10
題目大意
給出一個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; }