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 天前
线性代数
数学
小墙程序员2 天前
数理统计
数学
Lyrella3 天前
luogu-P5320题解
数学·题解
窗户10 天前
有限Abel群的结构(1)
数学·抽象代数·排列组合
起个破名想半天了11 天前
Sympy入门之微积分基本运算
python·数学·sympy
Shockang14 天前
谱分析方法
人工智能·数学·机器学习·时间序列分析
闻缺陷则喜何志丹15 天前
【数学 线性代数】差分约束
c++·线性代数·数学·差分约束·负环最短路
西电研梦16 天前
数统院复试来啦,西电数学与统计学院—考研录取情况
考研·数学·考研复试·西安电子科技大学
L_M_TY17 天前
D. Bash and a Tough Math Puzzle
数学·算法·线段树·gcd
zjoy_223322 天前
【Latex】latex公式手册大全||积分公式表示||极限表达||矩阵的各种表达
python·学习·线性代数·数学·矩阵·latex·高等数学