<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>对数 on Liangweidong's blog</title><link>https://liangweidonggood.github.io/tags/%E5%AF%B9%E6%95%B0/</link><description>Recent content in 对数 on Liangweidong's blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 15 Oct 2019 00:00:00 +0800</lastBuildDate><atom:link href="https://liangweidonggood.github.io/tags/%E5%AF%B9%E6%95%B0/index.xml" rel="self" type="application/rss+xml"/><item><title>数学概念速查：素数 / 对数 / 离散数学</title><link>https://liangweidonggood.github.io/p/shu-xue-gai-nian-su-cha-su-shu-dui-shu-li-san-shu-xue/</link><pubDate>Tue, 15 Oct 2019 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/shu-xue-gai-nian-su-cha-su-shu-dui-shu-li-san-shu-xue/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/shu-xue-gai-nian-su-cha-su-shu-dui-shu-li-san-shu-xue/image/cover.jpg" alt="Featured image of post 数学概念速查：素数 / 对数 / 离散数学" /&gt;&lt;h1 id="数学概念速查素数--对数--离散数学"&gt;数学概念速查：素数 / 对数 / 离散数学
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;前置&lt;/strong&gt;：这篇写于 2019 年 10 月。我当时在梳理&amp;quot;程序员应该重新捡起来的数学基础&amp;quot;，从散落的笔记里挑出 3 个常被问到、却总记不清的：&lt;strong&gt;素数（Prime）&lt;/strong&gt;、&lt;strong&gt;对数（Logarithm）&lt;/strong&gt;、&lt;strong&gt;离散数学（Discrete Math）&lt;/strong&gt;。本文以&amp;quot;概念 + 代码 + 关联&amp;quot;三层结构呈现。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="为什么写这篇"&gt;为什么写这篇
&lt;/h2&gt;&lt;p&gt;工作 5 年之后，我发现自己读 RFC、看算法书、甚至 review 同事的代码时，常常被&lt;strong&gt;一个数学概念卡住 5 分钟&lt;/strong&gt;——不是不会，是&lt;strong&gt;太久没用了，定义都模糊了&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;举 3 个真实例子：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同事写的&amp;quot;质数判定&amp;quot;用了 &lt;code&gt;n/2&lt;/code&gt; 遍历，我一眼看出应该用 &lt;code&gt;sqrt(n)&lt;/code&gt;，但嘴上说不清&amp;quot;为什么遍历到 &lt;code&gt;sqrt&lt;/code&gt; 就够&amp;quot;&lt;/li&gt;
&lt;li&gt;看到数据库索引 &lt;code&gt;O(log n)&lt;/code&gt; 的描述，我脑子里浮现的是&amp;quot;&lt;code&gt;log&lt;/code&gt; 不是很大吗&amp;quot;——把&amp;quot;以 10 为底&amp;quot;和&amp;quot;以 2 为底&amp;quot;搞混了&lt;/li&gt;
&lt;li&gt;看到 Redis Cluster 的&amp;quot;16384 个 slot&amp;quot;用 CRC16 取模，我能跟着算，但说不出&amp;quot;为什么是 16384&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这 3 个例子背后分别站着 &lt;strong&gt;素数&lt;/strong&gt;、&lt;strong&gt;对数&lt;/strong&gt;、&lt;strong&gt;离散数学&lt;/strong&gt;。于是我决定写一篇&amp;quot;自己的速查手册&amp;quot;。&lt;/p&gt;
&lt;h2 id="3-个概念速查"&gt;3 个概念速查
&lt;/h2&gt;&lt;h3 id="1-素数prime--质数"&gt;1. 素数（Prime / 质数）
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;定义&lt;/strong&gt;：在大于 1 的自然数中，除了 1 和它自身外，&lt;strong&gt;无法被其他自然数整除&lt;/strong&gt;的数，否则称为合数（Composite）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;素数序列：&lt;code&gt;2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, ...&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;判断定理&lt;/strong&gt;：若 &lt;code&gt;n&lt;/code&gt; 是合数，则 &lt;code&gt;n&lt;/code&gt; 必有&lt;strong&gt;一个小于等于 &lt;code&gt;sqrt(n)&lt;/code&gt; 的因子&lt;/strong&gt;。
因此遍历到 &lt;code&gt;sqrt(n)&lt;/code&gt; 即可。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;math&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 只遍历到 sqrt(n)，步长 2（跳过偶数）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Eratosthenes 筛法&lt;/strong&gt;：求 &lt;code&gt;n&lt;/code&gt; 以内所有素数的 O(n log log n) 算法。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sieve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;is_prime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;is_prime&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;is_prime&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;程序员视角的素数用途&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;场景&lt;/th&gt;
					&lt;th&gt;素数的作用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Hash 表大小&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;选素数容量（如 &lt;code&gt;HashMap&lt;/code&gt; 内部 2 的幂次 + 二次扰动函数）减少 hash 冲突&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;密码学&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;RSA 算法的安全性基于&amp;quot;大整数分解的素因子很难找&amp;quot;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;CRC 校验&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;选生成多项式时倾向用本原多项式（与素数相关）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;负载均衡&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;一致性 Hash 选素数虚拟节点数（150 / 200），让 hash 分布更均匀&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="2-对数logarithm"&gt;2. 对数（Logarithm）
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;定义&lt;/strong&gt;：如果 &lt;code&gt;a&lt;/code&gt; 的 &lt;code&gt;x&lt;/code&gt; 次方等于 &lt;code&gt;N&lt;/code&gt;（其中 &lt;code&gt;a &amp;gt; 0&lt;/code&gt; 且 &lt;code&gt;a ≠ 1&lt;/code&gt;），那么数 &lt;code&gt;x&lt;/code&gt; 叫做以 &lt;code&gt;a&lt;/code&gt; 为底 &lt;code&gt;N&lt;/code&gt; 的对数（logarithm），记作 &lt;code&gt;x = logₐN&lt;/code&gt;。其中 &lt;code&gt;a&lt;/code&gt; 叫做&lt;strong&gt;底数&lt;/strong&gt;（base），&lt;code&gt;N&lt;/code&gt; 叫做&lt;strong&gt;真数&lt;/strong&gt;（argument）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;等价关系&lt;/strong&gt;：&lt;code&gt;a^x = N ⟺ x = logₐN&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;对数恒等式&lt;/strong&gt;（程序员最常用的几个）：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;名称&lt;/th&gt;
					&lt;th&gt;公式&lt;/th&gt;
					&lt;th&gt;含义&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;基本恒等式&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;logₐ1 = 0&lt;/code&gt;，&lt;code&gt;logₐa = 1&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;任何底数的 1 对数都是 0；底数自身取对数是 1&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;反对数&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;a^(logₐN) = N&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;幂和对数是逆运算&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;乘积&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;logₐ(M·N) = logₐM + logₐN&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;乘变加&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;商&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;logₐ(M/N) = logₐM - logₐN&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;除变减&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;幂&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;logₐ(M^k) = k·logₐM&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;幂变乘&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;换底公式&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;logₐN = log_bN / log_ba&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;任意底之间转换&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;2 个最常见的底数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lg N&lt;/code&gt; = &lt;code&gt;log₂N&lt;/code&gt;：以 2 为底，&lt;strong&gt;计算机科学默认底数&lt;/strong&gt;（信息论、二叉树、二分查找）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ln N&lt;/code&gt; = &lt;code&gt;logₑN&lt;/code&gt;（自然对数）：以 e（≈ 2.71828）为底，&lt;strong&gt;微积分、复利、机器学习&lt;/strong&gt; 大量出现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;计算机科学的时间复杂度速查&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;算法&lt;/th&gt;
					&lt;th&gt;复杂度&lt;/th&gt;
					&lt;th&gt;含义&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;二分查找&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;O(log n)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;n = 100 万时，log₂n ≈ 20 次&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;平衡二叉搜索树查找/插入&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;O(log n)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;100 万节点约 20 层&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;堆排序 / 归并排序&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;O(n log n)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;100 万数据约 2000 万次操作&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;哈希表查找（无冲突）&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;O(1)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;与 n 无关&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Python 代码示例&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;math&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 3.0 → log₂8 = 3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 2.0 → log₁₀0 = 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 10.0 → 2^10 = 1024&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 1.0 → ln(e) = 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 时间复杂度直觉：n=100 万&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1_000_000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# ≈ 19.93 → 二分查找仅需 20 次&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# ≈ 2e7 → nlogn 排序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="3-离散数学discrete-mathematics"&gt;3. 离散数学（Discrete Mathematics）
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;定义&lt;/strong&gt;：研究&lt;strong&gt;离散量&lt;/strong&gt;（discrete quantities）的结构及其相互关系的数学学科，是现代数学的一个重要分支。与连续数学（微积分、实分析）相对，离散数学的对象一般是&lt;strong&gt;有限个或可数个元素&lt;/strong&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么计算机专业必修&lt;/strong&gt;：
&amp;ldquo;通过离散数学的学习，不但可以掌握处理离散结构的描述工具和方法，为后续课程的学习创造条件，而且可以提高抽象思维和严格的逻辑推理能力。&amp;quot;（任一本离散数学教材的绪论）&lt;/p&gt;
&lt;p&gt;应用领域：程序设计语言、数据结构、操作系统、编译技术、人工智能、数据库、算法设计与分析、理论计算机科学基础。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;四大支柱&lt;/strong&gt;（&amp;ldquo;集合、图、代数、逻辑&amp;rdquo;）：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;支柱&lt;/th&gt;
					&lt;th&gt;主要内容&lt;/th&gt;
					&lt;th&gt;程序员最熟悉的子领域&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;集合论&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;集合及其运算、二元关系与函数、自然数及自然数集、集合的基数&lt;/td&gt;
					&lt;td&gt;SQL 的 &lt;code&gt;IN / EXISTS / JOIN&lt;/code&gt;、Redis 的 &lt;code&gt;SADD / SINTER&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;图论&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;图的基本概念、欧拉图与哈密顿图、树、图的矩阵表示、平面图、图着色、支配集/覆盖集/独立集/匹配、带权图&lt;/td&gt;
					&lt;td&gt;最短路径（Dijkstra）、社交网络、K8s Service 依赖&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;代数结构&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;代数系统的基本概念、半群与独异点、群、环与域、格与布尔代数&lt;/td&gt;
					&lt;td&gt;密码学（模运算、有限域）、编译器优化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;数理逻辑&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;命题逻辑、一阶谓词演算、消解原理&lt;/td&gt;
					&lt;td&gt;数据库查询优化器、Prolog、约束求解器&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;集合论部分详解&lt;/strong&gt;（最容易和 SQL 关联）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;集合及其运算&lt;/strong&gt;：并（&lt;code&gt;UNION&lt;/code&gt;）、交（&lt;code&gt;INTERSECT&lt;/code&gt;）、差（&lt;code&gt;EXCEPT&lt;/code&gt;）、补、对称差（&lt;code&gt;A △ B&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;二元关系与函数&lt;/strong&gt;：映射、单射、满射、双射——这 3 个&amp;quot;射&amp;quot;是后续理解 hash、索引、SQL 关联的基础&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自然数及自然数集&lt;/strong&gt;：Peano 公理（5 条），不靠&amp;quot;自然数就是 0, 1, 2&amp;hellip;&amp;ldquo;这种直觉&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;集合的基数&lt;/strong&gt;：可数集 vs 不可数集；Hilbert 旅馆问题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;图论部分详解&lt;/strong&gt;（最容易和算法关联）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;图的基本概念&lt;/strong&gt;：顶点（V）、边（E）、度（degree）、路径、连通性&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;欧拉图 vs 哈密顿图&lt;/strong&gt;：前者&amp;quot;走遍所有边一次&amp;rdquo;（一笔画问题，源自 Königsberg 七桥问题），后者&amp;quot;走遍所有顶点一次&amp;rdquo;（TSP 旅行商问题）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;树&lt;/strong&gt;：特殊的无环连通图；二叉树、B 树、红黑树都属此家族&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图的矩阵表示&lt;/strong&gt;：邻接矩阵（&lt;code&gt;O(1)&lt;/code&gt; 查边、空间 &lt;code&gt;O(V²)&lt;/code&gt;）、关联矩阵、邻接表（&lt;code&gt;O(deg)&lt;/code&gt; 查边、空间 &lt;code&gt;O(V+E)&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图着色&lt;/strong&gt;：相邻顶点不能同色——编译器寄存器分配、时间表排课本质都是图着色&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;带权图&lt;/strong&gt;：边上带权值——Dijkstra 最短路径、Prim 最小生成树&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="三个概念的内在关联"&gt;三个概念的内在关联
&lt;/h2&gt;&lt;p&gt;如果一定要给&amp;quot;程序员应该理解这三个概念&amp;quot;找一个&lt;strong&gt;理由&lt;/strong&gt;，那就是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;素数&lt;/strong&gt; = &amp;ldquo;&lt;strong&gt;不可分解的最小单位&lt;/strong&gt;&amp;quot;——是密码学和 hash 算法的基石&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对数&lt;/strong&gt; = &amp;ldquo;&lt;strong&gt;乘除变加减、规模变线性&lt;/strong&gt;&amp;quot;——是时间复杂度的描述语言&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;离散数学&lt;/strong&gt; = &amp;ldquo;&lt;strong&gt;有限世界的全套工具箱&lt;/strong&gt;&amp;quot;——是计算机科学本身的母语&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;三者加起来，构成了&lt;strong&gt;计算机从业者的&amp;quot;数学底盘&amp;rdquo;&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="5-个常见误区"&gt;5 个常见误区
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;素数 = 质数 = 是不是 1&amp;rdquo;&lt;/strong&gt;：1 既不是素数也不是合数（1 只有 1 个因子，素数要求 2 个因子）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;log 默认以 10 为底&amp;rdquo;&lt;/strong&gt;：数学书以 10 为底（&lt;code&gt;lg&lt;/code&gt;），计算机科学以 2 为底（&lt;code&gt;log₂&lt;/code&gt;），微积分以 e 为底（&lt;code&gt;ln&lt;/code&gt;），三个底数别混&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;O(log n) 比 O(1) 慢很多&amp;rdquo;&lt;/strong&gt;：错。&lt;code&gt;log₂(10亿) ≈ 30&lt;/code&gt;，所以 &lt;code&gt;O(log n)&lt;/code&gt; 在工程上几乎等同于 &lt;code&gt;O(1)&lt;/code&gt;（常数 30）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;离散数学 = 离散事件数学&amp;rdquo;&lt;/strong&gt;：错。&amp;ldquo;离散&amp;quot;指&lt;strong&gt;离散量&lt;/strong&gt;（可数/有限），对应的是&lt;strong&gt;连续量&lt;/strong&gt;（微积分处理的实数连续区间）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;对数 = 减法&amp;rdquo;&lt;/strong&gt;：对数是&lt;strong&gt;乘除转加减&lt;/strong&gt;，不是减法本身&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="写在最后"&gt;写在最后
&lt;/h2&gt;&lt;p&gt;这一篇没有&amp;quot;实战代码&amp;rdquo;，更多是&lt;strong&gt;给自己打地基&lt;/strong&gt;。我后来每次被数学概念卡住，都会回到这篇过一遍——素数定义 → Eratosthenes 筛法 → 对数换底 → 图论七大概念，3 分钟过完，思路立刻清晰。&lt;/p&gt;
&lt;p&gt;如果你也是工作 3-5 年的程序员，常常被&amp;quot;这个数学概念是什么&amp;quot;打断思考节奏，&lt;strong&gt;强烈建议你也写一份自己的速查手册&lt;/strong&gt;——不一定要公开，写给未来的自己即可。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;下一步&lt;/strong&gt;：下一篇会写&amp;quot;算法复杂度速查表&amp;rdquo;——把 &lt;code&gt;O(1)&lt;/code&gt; 到 &lt;code&gt;O(n!)&lt;/code&gt; 的所有常见量级，用代码实测验证，并配上对应的真实算法例子。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;《离散数学及其应用》（Kenneth H. Rosen 著）—— 经典教材，集合/图/代数/逻辑四件套全覆盖&lt;/li&gt;
&lt;li&gt;《算法导论》（Cormen, Leiserson, Rivest, Stein 著）—— 素数、对数、时间复杂度的标准出处&lt;/li&gt;
&lt;li&gt;Python 官方文档 &lt;code&gt;math&lt;/code&gt; 模块：&lt;a class="link" href="https://docs.python.org/3/library/math.html" target="_blank" rel="noopener"
 &gt;https://docs.python.org/3/library/math.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="6-年后补遗ai-时代的素数--对数--离散数学新意义"&gt;6 年后补遗：AI 时代的&amp;quot;素数 / 对数 / 离散数学&amp;quot;新意义
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;本文写于 2019 年 10 月，&lt;strong&gt;6 年后回看，3 个老概念都有了&amp;quot;AI 时代&amp;quot;的新应用场景&lt;/strong&gt;。下面补全 2025-2026 年的视角。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="素数新应用后量子密码学"&gt;素数新应用：后量子密码学
&lt;/h3&gt;&lt;p&gt;2019 年 RSA 还在统治加密世界，&lt;strong&gt;2024-2025 后量子密码（Post-Quantum Cryptography, PQC）成为新焦点&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NIST PQC 标准&lt;/strong&gt;（2024-08 发布）：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ML-KEM&lt;/strong&gt;（原 CRYSTALS-Kyber）—— 密钥封装&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ML-DSA&lt;/strong&gt;（原 CRYSTALS-Dilithium）—— 数字签名&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SLH-DSA&lt;/strong&gt;（原 SPHINCS+）—— 基于哈希的签名&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;这些算法的核心仍然依赖&lt;strong&gt;格密码（Lattice-based）&lt;/strong&gt; 与&lt;strong&gt;素数 / 有限域运算&lt;/strong&gt;——素数仍是密码学的基石&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2024-2026 中国国产算法&lt;/strong&gt;：SM2 椭圆曲线（替代 RSA）、SM3 哈希、SM4 对称——&lt;strong&gt;等保 2.0 三级合规要求&lt;/strong&gt;所有政企系统支持&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;程序员视角：5 年后做&amp;quot;安全&amp;quot;相关项目，&lt;strong&gt;&amp;ldquo;素数&amp;quot;的概念仍然是入门必备&lt;/strong&gt;——但要补 PQC 的数学基础（格、向量空间、模运算）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="对数新应用transformer-的对数级别复杂度"&gt;对数新应用：Transformer 的&amp;quot;对数级别&amp;quot;复杂度
&lt;/h3&gt;&lt;p&gt;2019 年我们说 &lt;code&gt;O(log n)&lt;/code&gt; 是&amp;quot;二分查找的复杂度&amp;rdquo;。&lt;strong&gt;2025 年 &lt;code&gt;O(n²)&lt;/code&gt; 才是大模型训练的核心&lt;/strong&gt;——但对数仍无处不在：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Token 上下文长度&lt;/strong&gt;：主流 LLM 上下文从 4K → 32K → 128K → 1M（2024-2025）—— &lt;strong&gt;每翻一倍，显存/算力压力指数级增长&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attention 机制&lt;/strong&gt;：标准 Attention 是 &lt;code&gt;O(n²)&lt;/code&gt;，2024-2026 各种&amp;quot;线性 Attention&amp;rdquo;（Performer / Linear Transformer / Mamba）的核心目标就是&lt;strong&gt;把 n² 压到 n·log(n) 或 n&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FlashAttention&lt;/strong&gt;（2022-2024）：把 GPU 显存从 &lt;code&gt;O(n²)&lt;/code&gt; 压到 &lt;code&gt;O(log n)&lt;/code&gt;，&lt;strong&gt;让 128K 上下文成为可能&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KV Cache 压缩&lt;/strong&gt;：基于对数的位运算，把推理时显存压到原来的 1/4&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;程序员视角：理解&amp;quot;为什么 Transformer 这么烧钱&amp;quot;，&lt;strong&gt;对数 / 复杂度分析就是起点&lt;/strong&gt;——这块是 2025 后端 + AI 工程师面试必问。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="离散数学新应用大模型--知识图谱--形式化验证"&gt;离散数学新应用：大模型 + 知识图谱 + 形式化验证
&lt;/h3&gt;&lt;p&gt;2019 年我说&amp;quot;离散数学 = 有限世界的工具箱&amp;quot;，&lt;strong&gt;2025 年这个工具箱直接喂给大模型&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RAG（检索增强生成）&lt;/strong&gt;：本质是&lt;strong&gt;集合论 + 关系代数&lt;/strong&gt;——文档 → 嵌入 → 集合查询 → Top-K&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;知识图谱&lt;/strong&gt;：用图论建模实体关系，&lt;strong&gt;大模型 + 知识图谱&lt;/strong&gt;成为 2024-2026 企业 AI 的标准架构&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;图神经网络（GNN）&lt;/strong&gt;：图论 + 深度学习的结合，&lt;strong&gt;药物发现、推荐系统、社交网络&lt;/strong&gt;都有应用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;形式化验证（Formal Verification）&lt;/strong&gt;：数理逻辑 + 自动定理证明，&lt;strong&gt;Lean 4 + Copilot&lt;/strong&gt; 2024-2025 在数学证明 + 代码验证上爆发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Z3 SMT Solver&lt;/strong&gt;：约束求解器（数理逻辑应用），&lt;strong&gt;程序分析、编译器优化、形式化验证&lt;/strong&gt;的核心&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;程序员视角：2024-2026 写&amp;quot;AI 应用&amp;quot;，&lt;strong&gt;&amp;ldquo;集合 / 图 / 逻辑&amp;rdquo; 是底层语言&lt;/strong&gt;——RAG 是集合操作、知识图谱是图、Chain-of-Thought 是逻辑推理。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="3-个老概念的新意义对照"&gt;3 个老概念的&amp;quot;新意义&amp;quot;对照
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;概念&lt;/th&gt;
					&lt;th&gt;2019 应用&lt;/th&gt;
					&lt;th&gt;2025-2026 应用&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;素数&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Hash 表 / RSA&lt;/td&gt;
					&lt;td&gt;后量子密码（PQC） / SM 国密&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;对数&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;二分查找 / &lt;code&gt;O(log n)&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Attention 复杂度 / Token 预算 / KV Cache&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;离散数学&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;SQL / 算法分析 / 编译原理&lt;/td&gt;
					&lt;td&gt;RAG / 知识图谱 / GNN / 形式化验证&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="5-年前-vs-5-年后面试题的变化"&gt;5 年前 vs 5 年后：面试题的变化
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;2019 年面试常问&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;素数判定有几种优化？&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;为什么二分查找是 &lt;code&gt;O(log n)&lt;/code&gt;？&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;集合论与 SQL 的对应关系？&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2025-2026 年面试常问&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;后量子密码和 RSA 的数学基础有什么不同？&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Transformer 的 Attention 为什么是 &lt;code&gt;O(n²)&lt;/code&gt;？FlashAttention 怎么压到 &lt;code&gt;O(n log n)&lt;/code&gt;？&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;RAG 系统怎么用集合论优化 Top-K 召回？&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;知识图谱 Embedding 和 GNN 有什么关系？&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;5 年变化的核心&lt;/strong&gt;：&lt;strong&gt;3 个老概念都还在用，但应用场景从&amp;quot;系统内部&amp;quot;走向&amp;quot;AI 系统&amp;quot;&lt;/strong&gt;——素数在加密，对数在 LLM，离散数学在 RAG + 知识图谱。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="给想补数学基础的工程师的-2025-升级版书单"&gt;给&amp;quot;想补数学基础的工程师&amp;quot;的 2025 升级版书单
&lt;/h3&gt;&lt;p&gt;2019 年我推荐的是 Rosen《离散数学》+ CLRS《算法导论》。&lt;strong&gt;2025 年如果重写这个书单，我会加这 3 本&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;教材&lt;/th&gt;
					&lt;th&gt;主题&lt;/th&gt;
					&lt;th&gt;2025 价值&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;《Mathematics for Machine Learning》&lt;/strong&gt;（MML 书籍）&lt;/td&gt;
					&lt;td&gt;线性代数 + 概率 + 优化&lt;/td&gt;
					&lt;td&gt;入门 ML 必备数学&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;《信息论、推理与学习算法》&lt;/strong&gt;（David MacKay）&lt;/td&gt;
					&lt;td&gt;信息论 + 编码&lt;/td&gt;
					&lt;td&gt;理解 LLM 原理&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;《Proofs from THE BOOK》&lt;/strong&gt;（Aigner, Ziegler）&lt;/td&gt;
					&lt;td&gt;数学证明美学&lt;/td&gt;
					&lt;td&gt;训练逻辑思维&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;外加 2 个&lt;strong&gt;在线免费资源&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;3Blue1Brown 的&amp;quot;线性代数的本质&amp;quot;&lt;/strong&gt;（YouTube / B 站）—— 视觉化理解向量空间&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MIT 6.042J &amp;ldquo;Mathematics for Computer Science&amp;rdquo;&lt;/strong&gt;（OCW）—— 离散数学经典&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="写在最后6-年后我还想说"&gt;写在最后：6 年后我还想说
&lt;/h3&gt;&lt;p&gt;2019 年我说&amp;quot;工作 5 年后被数学卡住，是时候写速查手册&amp;quot;。&lt;strong&gt;6 年后我反而更想说&lt;/strong&gt;：&lt;strong&gt;速查手册不够用，要做&amp;quot;数学肌肉&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;速查&lt;/strong&gt;——解决&amp;quot;忘了定义&amp;quot;的问题&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;肌肉&lt;/strong&gt;——解决&amp;quot;看到新问题能立刻想到数学工具&amp;quot;的问题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2025 年的工程师，&lt;strong&gt;&amp;ldquo;被数学卡住 5 分钟&amp;rdquo;&lt;/strong&gt; 和 &lt;strong&gt;&amp;ldquo;看到 AI 问题立刻想到线性代数&amp;rdquo;&lt;/strong&gt;，差距是巨大的。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;6 年前的我&lt;/strong&gt;：写完这篇继续 review 代码，偶尔翻一下。&lt;br&gt;
&lt;strong&gt;现在的我&lt;/strong&gt;：&lt;strong&gt;写完这篇立刻打开 3Blue1Brown 复习特征值&lt;/strong&gt;——因为上周 review 的 RAG 系统还在纠结 embedding 维度。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;数学不会变老，&lt;strong&gt;只是换了个地方等我们回来&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="参考资料2024-补充"&gt;参考资料（2024+ 补充）
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://csrc.nist.gov/projects/post-quantum-cryptography" target="_blank" rel="noopener"
 &gt;NIST 后量子密码标准（FIPS 203/204/205）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/Dao-AILab/flash-attention" target="_blank" rel="noopener"
 &gt;FlashAttention 论文（2022-2024）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/state-spaces/mamba" target="_blank" rel="noopener"
 &gt;Mamba: Linear-Time Sequence Modeling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/microsoft/graphrag" target="_blank" rel="noopener"
 &gt;Microsoft GraphRAG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://leanprover.github.io/" target="_blank" rel="noopener"
 &gt;Lean 4 形式化证明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.3blue1brown.com/topics/linear-algebra" target="_blank" rel="noopener"
 &gt;3Blue1Brown 线性代数本质&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2010/" target="_blank" rel="noopener"
 &gt;MIT 6.042J Mathematics for CS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://mml-book.github.io/" target="_blank" rel="noopener"
 &gt;《Mathematics for Machine Learning》&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>