1. 纯素数生成:深度优先搜索的经典应用
1.1 纯素数问题解析
纯素数是一种特殊的素数序列,其定义具有递归特性:一个n位数是纯素数当且仅当它本身是素数,并且去掉最后一位后剩下的(n-1)位数仍然是纯素数。这个性质使得我们可以用深度优先搜索(DFS)的方法系统地构建所有纯素数。
理解这个问题的关键在于把握两个核心特征:
- 基础情况:1位纯素数就是2、3、5、7这四个一位素数
- 递归性质:一个k位纯素数可以通过在(k-1)位纯素数末尾添加一个数字(0-9)得到,只要新形成的k位数仍然是素数
1.2 DFS算法实现细节
DFS算法的实现需要考虑以下几个关键点:
- 素数判断优化:使用试除法时,只需检查到√n即可
cpp复制bool isPrime(int x) {
if (x < 2) return false;
for (int i = 2; i * i <= x; i++) {
if (x % i == 0)
return false;
}
return true;
}
- DFS递归构建:从1位素数开始,逐步构建更长的纯素数
cpp复制void dfs(int num, int len, int T) {
if (len == T) {
cout << num << endl;
return;
}
for (int i = 0; i <= 9; i++) {
int next = num * 10 + i;
if (isPrime(next)) {
dfs(next, len + 1, T);
}
}
}
- 初始调用:必须从合法的1位素数开始搜索
cpp复制dfs(2, 1, T);
dfs(3, 1, T);
dfs(5, 1, T);
dfs(7, 1, T);
1.3 性能分析与优化
虽然题目中T≤8使得搜索空间不大,但仍有优化空间:
- 预处理素数表:可以预先计算并存储所有可能的8位素数,但需要约100MB
