feat(eular_12.py):优化质数测试参数并修复组合数计算逻辑

 feat(eular_13.py):新增超大整数加法解决方案
📝 docs(eular_13.md):添加算法说明文档
 feat(eular_14.py):新增Collatz序列最长链计算
📝 docs(eular_14.md):添加性能优化说明
 feat(eular_15.py):新增网格路径组合数学解法
📝 docs(eular_15.md):添加组合数学详细说明
 feat(eular_16.py):新增幂数字和计算功能
 feat(eular_16.hs):新增Haskell版本实现
This commit is contained in:
2025-12-17 16:02:06 +08:00
parent 9762ba3f0c
commit 48f57bd443
9 changed files with 386 additions and 4 deletions

View File

@@ -0,0 +1,88 @@
# 组合数学
### 我的错误
我搞了很久在想自己在这个问题上放的错误。原始错误是m+n长度路径应该选择n-1个情况进行选择因为最右的点只有一个选择。
真的是错得离谱了。正确理解应该是程度为m+n的长度上选择在m或者n的次序上改变方向。
那我就整体回顾一下组合数学吧。
### 另一条路
[整数序列 A000984](https://oeis.org/A000984) 。这里也有这个的详细说明和讨论。
### 组合数学概念速览
组合数学Combinatorics是研究离散对象的计数、排列、组合及结构关系的数学分支广泛应用于计算机科学、统计学、密码学等领域。其核心思想是**系统化地处理有限结构的排列与选择问题**,以下是其核心原理和关键定理的概述:
#### **一、基本原理**
1. **加法原理**
若完成一项任务有 \(m\) 种互斥的方法,另一种任务有 \(n\) 种方法,则选择其中一种任务的方法数为 \(m+n\)。
**示例**从3本数学书和4本历史书中选一本有 \(3+4=7\) 种选法。
2. **乘法原理**
若完成一项任务需连续执行多个步骤,第一步有 \(m\) 种方法,第二步有 \(n\) 种方法,则总方法数为 \(m \times n\)。
**示例**从3件上衣和2条裤子搭配有 \(3 \times 2=6\) 种搭配。
#### **二、关键定理与公式**
1. **排列与组合**
- **排列**(顺序相关):
\(n\) 个不同元素取 \(r\) 个排列:
\[
P(n,r) = \frac{n!}{(n-r)!}
\]
- **组合**(顺序无关):
\(n\) 个不同元素取 \(r\) 个组合:
\[
C(n,r) = \binom{n}{r} = \frac{n!}{r!(n-r)!}
\]
2. **二项式定理**
展开二项式幂的关键公式:
\[
(x+y)^n = \sum_{k=0}^{n} \binom{n}{k} x^{k} y^{n-k}
\]
组合数 \(\binom{n}{k}\) 称为**二项式系数**,体现在杨辉三角(帕斯卡三角)中。
3. **鸽巢原理(抽屉原理)**
将 \(n\) 个物品放入 \(m\) 个容器,若 \(n>m\),则至少有一个容器包含至少两个物品。
**应用**:证明重复性存在(如生日悖论)。
4. **容斥原理**
计算多个集合的并集大小,避免重复计数:
\[
|A_1 \cup A_2 \cup \cdots \cup A_n| = \sum |A_i| - \sum |A_i \cap A_j| + \cdots + (-1)^{n+1} |A_1 \cap \cdots \cap A_n|
\]
**应用**:错排问题、素数计数。
5. **生成函数**
将序列转化为形式幂级数,化组合问题为代数问题。例如,求组合数时:
\[
(1+x)^n = \sum_{k=0}^{n} \binom{n}{k} x^k
\]
普通生成函数用于计数,指数生成函数用于排列问题。
6. **卡特兰数**
定义:
\[
C_n = \frac{1}{n+1} \binom{2n}{n}
\]
应用于括号匹配、二叉树计数、网格路径问题。
7. **斯特林数**
- **第二类斯特林数** \(S(n,k)\):将 \(n\) 个不同元素划分为 \(k\) 个非空集合的方法数。
- **第一类斯特林数**:与轮换排列相关。
8. **波利亚计数定理**
考虑对称性下的计数问题,用于染色、图形枚举等场景。
#### **三、核心思想**
- **一一对应**:将复杂计数映射到已知模型(如将组合问题转化为方程整数解个数)。
- **递归与递推**:通过子问题构造关系式(如斐波那契数列、错排公式)。
- **对称性与分类讨论**:利用对称性简化问题,对不重不漏的分类要求严格。
#### **四、应用领域**
- **算法设计**:分析算法复杂度(如动态规划状态数)。
- **图论**:树、图的计数与结构分析。
- **编码理论**:纠错码的构造与组合设计。
- **概率论**:古典概型中的样本空间计数。