今天学习了二分思想
二分 就是把一串有序数列一直对半分 每次 可以去掉一半 时间复杂度为 log2n 是一种十分省时的算法
luogu2759
这题的意思就是求最小的x 使x^x达到或超过n位数字
要求x^x的位数 根据数学上 的 就是 x*log10x 但是还要加1 与n比较 如果大了 说明 在左边一半 则去掉右边
代码附下:
#include<bits/stdc++.h>
using namespace std;
long long n;
int la(int t)
{
long long k=t;
return double (k*log10(1.0*t))+1>=n;
}
int lala()
{
long long left=0,right=2000000000,mid;
while (left+1<right)
{
mid=(left+right)/2;
if (la(mid)) right=mid;
else left=mid;
}
if (la(left)) return left;
else return right;
}
int main()
{
cin>>n;
cout<<lala();
return 0;
}