1. 纯素数算法解析与实现
1.1 纯素数的定义与特性
纯素数是一种特殊的素数序列,其定义是:当它是一个多位数时,每次去掉末位数字后剩下的数仍然是素数。这个概念类似于数学中的"左截断素数",但更加严格。举个例子,2393就是一个4维纯素数:
- 2393(素数)
- 去掉末位:239(素数)
- 去掉末位:23(素数)
- 去掉末位:2(素数)
这种数的维度就是它的位数。理解纯素数的关键在于:
- 单数位素数(2,3,5,7)是1维纯素数的基础
- 高维纯素数必须通过低维纯素数构建
- 除了2和5,多位素数的末位只能是1,3,7,9
注意:数字2和5虽然是素数,但不能作为多位纯素数的组成部分(因为25、52等都不是素数),所以高维纯素数的构建只需要考虑1,3,7,9作为末位数字。
1.2 算法设计与实现
核心算法思路
采用深度优先搜索(DFS)来系统性地构建纯素数:
- 从1维纯素数(2,3,5,7)开始
- 在每个步骤尝试追加1,3,7,9四个可能的数字
- 检查新形成的数是否为素数
- 如果是素数,则递归继续构建更高维度的纯素数
cpp复制void dfs(int current_num, int dim) {
pure_primes[dim].push_back(current_num);
if (dim == 8) return;
int next_digits[] = {1, 3, 7, 9};
for (int d : next_digits) {
int next_num = current_num * 10 + d;
if (is_prime(next_num)) {
dfs(next_num, dim + 1);
}
}
}
素数判断优化
使用基础的试除法来判断素数,对于算法竞赛级别的需求已经足够:
cpp复制bool is_prime(int n) {
if (n < 2) return false;
if (n == 2 || n == 3) return true;
if (n % 2 == 0) re
