【对数】YY(jzoj 1438)

版权声明:欢迎借鉴,谢绝抄搬。 https://blog.csdn.net/ssllyf/article/details/86696220

YY

题目大意:

给出一个超大正整数S,求出 n n {n}^{n} =S中n的解

样例输入

387420489

样例输出

9

数据范围限制

S的位数小于500000

解题思路:

看到数据,爆搜是不可能的,我们用数字的位数来做,我们用一个公式: l o g 10 ( S ) + 1 log_{10}(S)+1 (S的位数,当S为100时,结果为2+1=3,若 a b {a}^{b} =S,则b= l o g a ( S ) + 1 log_{a}(S)+1 ),然后将S换为p的p次方(如题意)则为 l o g 10 ( p p ) + 1 log_{10}({p}^{p})+1 ,然后就可以代换成 p l o g 10 ( p ) + 1 p*log_{10}(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;
}

猜你喜欢

转载自blog.csdn.net/ssllyf/article/details/86696220