1. 程式人生 > >好題收集(2) 奇怪的函數(數學)

好題收集(2) 奇怪的函數(數學)

isp psr one str center width pan mds zsh

奇怪的函數

Description
洛谷P2759
使得$x^x$達到或超過 $n$ 位數字的最小正整數 $x$ 是多少?

Hint
乍一看是一道數學題
其實就是一道數學題
$a$ 在 $b$ 進制下的位數 $p$ 的計算公式為 $p=\lfloor log_b a \rfloor+1$
其實很好理解:
設$\lfloor x \rfloor$表示不超過 $x$ 的最大整數,若 $n=(a_k,a_k-1,…a_1,a_0)_b,a_k≠0$,
則$$b^k≤n<b^{k+1} ⇒k≤log_bn<k+1$$
即$k=\lfloor log_bn \rfloor$,總位數 $p=k+1$

所以$x^x$的位數就是$\lfloor lg{x^x} \rfloor+1$,運用對數知識就是$\lfloor xlgx \rfloor+1$
然後考慮到對數函數是單調的,所以可以用二分答案

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define LL long long
using namespace std;
LL n,l=1,r=2e9;
int main(){

    scanf
("%lld",&n); while(l<r){ LL mid=(l+r)>>1,len=(LL)(mid*log10(1.0*mid))+1; if(len<n) l=mid+1; else r=mid; } cout<<l<<endl; return 0; }
?

好題收集(2) 奇怪的函數(數學)