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

原创不易

转载请标明出处

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

相关推荐
装不满的克莱因瓶1 天前
掌握多头自注意力机制(Multi-Head Self-Attention)——Transformer 强大表达能力的核心来源
人工智能·python·深度学习·数学·ai·transformer
Samson Bruce1 天前
【初高中数学】
线性代数·数学·算法·机器学习
装不满的克莱因瓶1 天前
链式法则如何传递参数误差 —— 深入理解神经网络中的梯度传播
人工智能·python·深度学习·神经网络·数学·机器学习·ai
databook2 天前
用SymPy自动求解追及问题的方程
python·数学·动效
书中玉3 天前
2026高考一卷数学最后一问19题详细解答(含思路)
数学·考试·高考·2026年·最后一题·压轴题
aichitang20243 天前
群论中“字”的概念
数学·抽象代数
闻缺陷则喜何志丹3 天前
【解析几何丘维声 第一章】向量代数第一部分
数学·向量·解析几何·点乘·叉乘·混合积·二重叉乘
canonical_entropy4 天前
吸引子引导与轨迹挖掘:AI Native Engineering 的收敛机制
数学·架构·ai编程
databook4 天前
用SymPy自动求解三角形构造与全等条件验证
python·数学·动效
databook7 天前
用SymPy自动计算抛物线求根、判别式与顶点
python·数学·动效