YY
题目大意:
给出一个超大正整数S,求出nn{n}^{n}nn=S中n的解
样例输入
387420489
样例输出
9
数据范围限制
S的位数小于500000
解题思路:
看到数据,爆搜是不可能的,我们用数字的位数来做,我们用一个公式:log10(S)+1log_{10}(S)+1log10(S)+1(S的位数,当S为100时,结果为2+1=3,若ab{a}^{b}ab=S,则b=loga(S)+1log_{a}(S)+1loga(S)+1),然后将S换为p的p次方(如题意)则为log10(pp)+1log_{10}({p}^{p})+1log10(pp)+1,然后就可以代换成p∗log10(p)+1p*log_{10}(p)+1p∗log10(p)+1(因为p的p次方的位数,等于p的位数乘上p),然后根据这个东西枚举p,再判断这个的值和S的位数是否相等即可
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
string str;
long long len;
int main()
{cin>>str;len=str.size();//位数for (long long i=1;i<=len+1;++i)//枚举p,因为3^3=27,27的位数为2,由此得知要加一if (floor(i*log10(i)+1)==len)//求出p的p次方的位数,再判断是否和S的位数相等{printf("%lld",i);//输出break;//退出}return 0;
}