3^100的位数判断

3^100的位数判断

问题来源

字节面试,面试官提问:口算估计3^100的位数,或是给出位数估计范围。

解决方案

方法一:

该方法纯口算,可得一个较为准确的一个范围
2 100 < 3 100 < 4 100 2^{100}<3^{100}<4^{100} 2100<3100<4100
2 100 2^{100} 2100位数判断
2 100 = ( 2 10 ) 10 = 102 4 10 ≈ 100 0 10 = 1 0 30 2^{100} = (2^{10})^{10}=1024^{10}\approx1000^{10}=10^{30} 2100=(210)10=102410≈100010=1030 是31位数字
4 100 4^{100} 4100位数判断

由于 4 100 = ( 2 100 ) 2 4^{100}= (2^{100})^{2} 4100=(2100)2

故 4 100 = 1 0 60 4^{100}= 10^{60} 4100=1060是62位数字

故位数介于31与62之间

又 x 100 x^{100} x100函数的二阶导数>0

故 x 100 x^{100} x100为凹函数,故位数介于46与62之间

又 3 100 = 9 50 < 1 0 50 3^{100} = 9^{50}<10^{50} 3100=950<1050 故小于是51位数字

综上:位数介于46与51之间

方法二:

3 4 = 81 = 80 ∗ ( 81 80 ) 3^4=81=80*(\frac {81} {80}) 34=81=80∗(8081)
3 100 = 8 0 25 ∗ ( 81 80 ) 25 3^{100} = 80^{25}*(\frac{81}{80})^{25} 3100=8025∗(8081)25
= 2 75 ∗ 1 0 25 ∗ ( 81 80 ) 25 = 2^{75} * 10 ^{25} * (\frac{81} {80})^{25} =275∗1025∗(8081)25
= 32 ∗ 102 4 7 ∗ 1 0 25 ∗ ( 81 80 ) 25 = 32 * 1024^7 * 10^{25} * (\frac {81}{80})^{25} =32∗10247∗1025∗(8081)25
= 3.2 ∗ ( 1.024 ) 7 ∗ 1 0 47 ∗ ( 81 80 ) 25 = 3.2 * (1.024)^7 * 10^{47} * (\frac {81}{80})^{25} =3.2∗(1.024)7∗1047∗(8081)25

现在我们估计 ( 81 80 ) 25 (\frac{81}{80})^{25} (8081)25:它小于 ( 81 / 80 ) ∗ ( 80 / 79 ) ∗ . . . ∗ ( 57 / 56 ) = 81 / 56 < 1.5 (81/80)*(80/79)*...*(57/56) = 81/56 < 1.5 (81/80)∗(80/79)∗...∗(57/56)=81/56<1.5

类似的方法显示 1.02 4 7 < 1.0 3 7 < ( 103 / 100 ) ∗ ( 100 / 97 ) ∗ . . . ∗ ( 85 / 82 ) = 103 / 82 < 104 / 80 = 1.3 1.024^7 < 1.03^7 < (103/100)*(100/97)*...*(85/82)=103/82 < 104/80 = 1.3 1.0247<1.037<(103/100)∗(100/97)∗...∗(85/82)=103/82<104/80=1.3
3.2 ∗ 1 0 47 < 3 100 < 3.2 ∗ 1.5 ∗ 1.3 ∗ 1 0 47 < 1 0 48 3.2 * 10^{47} < 3^{100} < 3.2 * 1.5 * 1.3 * 10^{47} < 10^{48} 3.2∗1047<3100<3.2∗1.5∗1.3∗1047<1048

所以48位数字。

方法三:

该方法的关键是计算 log ⁡ 10 3 \log_{10} 3 log103
log ⁡ 10 3 = ln ⁡ 3 / ln ⁡ 10 \log_{10} 3 = \ln3 / \ln10 log103=ln3/ln10


对于 l n 3 ln3 ln3
x = 3 , y = 1 / 2 x = 3, y = 1/2 x=3,y=1/2

二阶展开结果为 1 ∗ ( 1 + 1 / 12 ) = 1.1 1*(1+1/12) = 1.1 1∗(1+1/12)=1.1

对于 l n 10 ln10 ln10
x = 10 , y = 9 / 11 x = 10, y = 9/11 x=10,y=9/11

二阶展开结果为 18 / 11 ∗ ( 1 + 81 / 363 ) 18/11*(1+81/363) 18/11∗(1+81/363) = 2

计算的 100 ∗ ( 1.1 / 2 ) + 1 = 56 100*(1.1/2)+1 = 56 100∗(1.1/2)+1=56

对于 l n 3 ln3 ln3
x = 3 , y = 1 / 2 x = 3, y = 1/2 x=3,y=1/2

对于 l n 10 ln10 ln10

三阶展开结果为 1 ∗ ( 1 + 1 / 12 + 1 / 80 ) = 1.1 1*(1+1/12+1/80) = 1.1 1∗(1+1/12+1/80)=1.1
x = 10 , y = 9 / 11 x = 10, y = 9/11 x=10,y=9/11

三阶展开结果为2.3

计算的100*1.1/2.3+1 = 49

总结

由于是计算机相关面试,很容易联想到使用 2 100 2^{100} 2100与 4 100 = ( 2 2 ) 100 = ( 2 100 ) 2 4^{100} = (2^{2})^{100} = (2^{100})^{2} 4100=(22)100=(2100)2尝试确定范围,结合 x 100 x^{100} x100函数性态确定为46-62位数,实际上,笔者面试时就是思考到这一步,没有想到与 3 100 = 9 50 3^{100} = 9^{50} 3100=950进一步确定范围。

方法二先将 3 100 3^{100} 3100转为 3.2 ∗ ( 1.024 ) 7 ∗ 1 0 47 ∗ ( 81 80 ) 25 3.2 * (1.024)^7 * 10^{47} * (\frac {81}{80})^{25} 3.2∗(1.024)7∗1047∗(8081)25 再进行适当缩放判断 ( 81 80 ) 25 (\frac{81}{80})^{25} (8081)25与 1.02 4 7 1.024^7 1.0247,该方法关键在于底数与对数的转换以及分数的裂项相消。

方法三是判断位数的常规方法,该方法关键在于对数 log ⁡ 10 3 \log_{10} 3 log103的估算。

参考文献

方法二参考 3的100次方是多少位数?评论区方法

方法三部分参考ChatGPT

原创不易

转载请标明出处

如果对你有所帮助 别忘啦点赞支持哈

相关推荐
XuYueming6 小时前
[NOIP2022] 比赛 随机排列 部分分
数学·线段树·题解·单调栈·洛谷·扫描线·二维数点·部分分·概率 & 期望
闻缺陷则喜何志丹2 天前
【C++ 曼哈顿距离 数学】1131. 绝对值表达式的最大值|2059
c++·数学·算法·力扣·最大值·哈曼顿距离·绝对值
kuailedetongnian3 天前
组合数学
c++·数学·oi
莫石4 天前
搓绳子(直)
前端·数学·three.js
亦枫Leonlew5 天前
微积分复习笔记 Calculus Volume 1 - 4.4 The Mean Value Theorem
笔记·数学·微积分·1024程序员节
亦枫Leonlew5 天前
微积分复习笔记 Calculus Volume 1 - 4.2 Linear Approximations and Differentials
笔记·数学·微积分·1024程序员节
何曾参静谧5 天前
「Math」高等数学知识点大纲(占位待处理)
数学
亦枫Leonlew9 天前
三维测量与建模笔记 - 2.1 坐标转换基础
笔记·数学·微积分
一直学习永不止步11 天前
LeetCode题练习与总结:4的幂--342
java·数据结构·数学·算法·leetcode·递归·位运算