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 天前
反比例函数的深层理解、题目技巧与应用
数学·函数·反比例函数
寂—作业逆行者1 天前
初识反比例函数
数学·函数·反比例函数
青花瓷8 天前
空间内任意点到直线和平面的距离推导
数学·平面·解析几何
Lyrella9 天前
拉格朗日反演小记
数学
AI是这个时代的魔法10 天前
The Action Replay Process
数学·算法·随机决策过程
啊阿狸不会拉杆11 天前
人工智能数学基础(十)—— 图论
人工智能·python·数学·算法·图论
啊阿狸不会拉杆17 天前
人工智能数学基础(五):概率论
人工智能·python·数学·算法·概率论
啊阿狸不会拉杆18 天前
人工智能数学基础(四):线性代数
人工智能·python·数学·算法·机器学习
量子位20 天前
数学家们仍在追赶天才拉马努金
人工智能·数学
是数学系的小孩儿20 天前
数值分析、数值代数之追赶法
数学·matlab·电脑