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
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈