C语言1. N位质数 【问题描述】 给定一个整数N(2 <= N <= 8),生成所有的具有下列特性的特殊的N位质数,即其前任意位都是质数。例如,7331即是这样一个4位的质数,因为7、73和733也都是质数。 【输入形式】 输入一个整数N(2 <= N <= 8)。 【输出形式】 输出有若干行,每行有一个整数,该整数有N位,而且其前任意位都是质数。
时间: 2024-02-28 18:52:12 浏览: 56
这道题可以使用回溯法来解决。我们可以从第一位开始,枚举所有可能的数字,然后判断该数字和前面的数字组成的数是否是质数,如果是质数,则继续向后递归。如果递归到了最后一位,而且该数字也是质数,则输出该数字。
下面是C的代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool is_prime(int n) {
if (n < 2) {
return false;
}
int sqrtn = sqrt(n);
for (int i = 2; i <= sqrtn; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
void dfs(int n, int cur) {
if (n == 0) {
printf("%d\n", cur);
return;
}
for (int i = 1; i <= 9; i++) {
int next = cur * 10 + i;
if (is_prime(next)) {
dfs(n - 1, next);
}
}
}
int main() {
int n;
scanf("%d", &n);
dfs(n, 0);
return 0;
}
```
通过递归实现深度优先搜索,从第一位开始枚举所有可能的数字,判断是否是质数,如果是质数继续递归下一位。如果递归到了最后一位,且该数字也是质数,则输出该数字。
阅读全文