
🌟数学魔法函数学院
第八课《寻找指数小偷------认识对数》
------ 当结果知道了,指数跑哪去了?
🎯 本课学习目标
学完本课后,你将掌握:
✅ 什么是对数
✅ 对数与指数的关系
✅ 为什么要发明对数
✅ C++中的
log()函数✅ 如何利用对数反求指数
✅ 对数在信息学竞赛中的应用
🏰 一、故事开始:指数小偷失踪案
一天,程序王国发生了一件奇怪的事情。
1、数学宝库里有一张神秘纸条:
2 ? = 1024
2、国王急坏了:
指数不见了!
3、原来:
?
的位置被神秘小偷偷走了。
4、国王下令:
谁能找到这个指数,
就封他为皇家数学侦探!
于是阿Q开始调查。
🔍 二、先回顾指数函数
阿Q想:
1、以前学过:
2¹ = 2
2² = 4
2³ = 8
2⁴ = 16
2⁵ = 32
2、继续往后:
2⁶ = 64
2⁷ = 128
2⁸ = 256
2⁹ = 512
2¹⁰ = 1024
3、终于发现:
2¹⁰ = 1024
4、所以小偷藏起来的数字是:
10
❓ 三、问题来了
刚才我们是一个个试出来的。
1、如果变成:
2 ? = 1048576
怎么办?
2、或者:
3 ? = 59049
怎么办?
3、难道要一直乘下去?
太麻烦了!
4、于是数学家发明了一个超级工具:
对数(Logarithm)
📖 四、什么是对数?
1、数学家规定:
如果:
a^x=b
2、那么:
对数定义为:

3、我们简单理解下:
a要乘自己多少次,
才能得到b?
4、例如:
2¹⁰ = 1024
那么:
意思:
2要乘自己10次
才能得到1024
🎮 五、把对数理解成侦探
1、指数逆计算:
2¹⁰ = 1024
(1)已知:
底数
2
(2)和结果:
1024
(3)求:
10
2、这时:
对数
就像侦探一样。
专门负责寻找失踪的指数。
3、所以:
指数函数
负责:
已知指数
求结果
4、而:
对数函数
负责:
已知结果
求指数
⚖️ 六、指数与对数是一对好朋友
1、看看这两个式子:
(1)指数形式:
cpp
10 ^ 2 =100
(2)对数形式:
cpp
lg100 = 2
其实表达的是同一件事。
2、再看:
(1)指数形式:
cpp
e ^ 1 = e
(2)对数形式:
cpp
ln e = 1
3、指数与对数的关系:
互为逆运算
4、就像:
加法 ↔ 减法
乘法 ↔ 除法
一样。
🧙 七、对数魔法表
1、阿Q整理出一张对数表。
| 指数形式 | 对数形式 |
|---|---|
| 2¹ = 2 | log₂2 = 1 |
| 2² = 4 | log₂4 = 2 |
| 2³ = 8 | log₂8 = 3 |
| 2⁴ = 16 | log₂16 = 4 |
| 2⁵ = 32 | log₂32 = 5 |
2、观察:
指数是多少
对数就是多少
3、因为:
对数本来就是找指数
🎯 八、第一个侦探任务
1、求:
log₂64
2、意思:
2的几次方等于64?
3、观察:
2⁶=64
4、所以:
log₂64=6
🎯 第二个侦探任务
1、求:
log₃81
2、意思:
3的几次方等于81?
3、观察:
3⁴=81
4、答案:
4
💻 九、C++中的对数函数
1、问题来了。
2、C++有没有:
log()
函数呢?
3、当然有!
需要头文件:
#include <cmath>
4、语法:
log(x)
5、注意:
这里计算的是:
cpp
自然对数 e
6、数学写作:
lnN
比如:lne=1
e是底数
e ≈2.71828... 在数学中是非常重要的科学常数。
7、C++中,例如输出:
cout << log(2);
输出的是:
0.693147...
❓ 十、为什么结果不是1?
1、很多同学第一次学都会疑惑。
2、因为:
log()
不是:
log₂
3、而是:
ln
即:
以e为底
4、在高中数学中我们会学到。
5、今天先记住,C++中的对数函数:
log()
表示:
自然对数
相当于数学中的
cpp
ln(N)
🏆 十一、如何求 log₂(X)呢?
1、例如:
求:
log₂1024
2、数学里有一个重要公式:
换底公式

3、于是:
4、C++中:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double ans = log(1024) / log(2);
cout << ans;
return 0;
}
5、输出:
10
🔥 十二、信息学竞赛中的应用
以后会遇到很多题目:
应用1:二分查找
(1)例如:
1024个数
(2)每次砍一半:
1024
512
256
128
64
32
16
8
4
2
1
(3)需要几次?
(4)其实就是:
2的几次方等于1024?
(5)答案:
10次
应用2:满二叉树
(1)第n层节点数:
(2)如果有:
1024个节点
求层数。
(3)其实就是:
求指数
需要对数。
应用3:快速幂
(1)我们学习:
快速幂
时,
时间复杂度:
(2)这里的:
log
就是对数。
🚧 十三、初学者最容易犯的错误
错误1
(1)认为:
log(8)
(2)等于:
3
错!
(3)因为:
log()
默认不是:
log₂
(4)而是:
ln
错误2
忘记包含头文件
#include <cmath>
错误3
(1)把:
pow()
和
log()
搞混。
(2)记忆:
pow()
知道指数求结果
log()
知道结果求指数
🎮 挑战任务
第一题
求:
log₂32
第二题
求:
log₃243
第三题
已知:
2^x=2048
求:
x
第四题
为什么:
cpp
2¹⁰ 约等于 1000
所以:
cpp
log₂1000 约等于 10
📝 本课总结
1、今天我们认识了指数函数最好的朋友:
对数函数
核心定义:
对数就是寻找失踪的指数。
2、一句话:
指数函数:
知道指数求结果
对数函数:
知道结果求指数
下一课:
⚔️《魔法天梯有多高------对数增长》⚔️
在这里,同学们会发现:
为什么二分查找能那么快?
为什么100万数据只需要查20次左右?
对数到底为什么被称为:
🏆 增长最慢的函数之一。