C语言1. N位质数 【问题描述】 给定一个整数N(2 <= N <= 8),生成所有的具有下列特性的特殊的N位质数,即其前任意位都是质数。例如,7331即是这样一个4位的质数,因为7、73和733也都是质数。 【输入形式】 输入一个整数N(2 <= N <= 8)。 【输出形式】 输出有若干行,每行有一个整数,该整数有N位,而且其前任意位都是质数。
时间: 2024-02-27 11:56:58 浏览: 122
可以使用递归和素数判定的方法来解决这个问题。
首先需要一个函数来判断一个数是否为素数,可以使用试除法:
```c
int is_prime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
```
接下来可以使用递归来生成所有符合条件的N位数。递归函数的参数包括当前已经生成的N位数和当前已经生成的前缀数,初始时前缀数为0。每次递归时,首先判断当前已经生成的N位数是否为素数,如果是,则输出该数;然后,对当前已经生成的N位数加上1、3、7、9四个数字,分别作为下一次递归的N位数,同时更新前缀数为当前已经生成的N位数。
```c
void generate_primes(int n, int num, int prefix) {
if (n == 0) {
if (is_prime(num)) {
printf("%d\n", num);
}
return;
}
for (int i = 1; i <= 9; i += 2) {
int next_num = num * 10 + i;
if (is_prime(next_num)) {
generate_primes(n - 1, next_num, next_num);
}
}
if (prefix != 0) {
for (int i = 0; i < n; i++) {
prefix /= 10;
}
generate_primes(n, prefix, prefix);
}
}
```
最后,在main函数中调用递归函数即可:
```c
int main() {
int n;
scanf("%d", &n);
generate_primes(n, 0, 0);
return 0;
}
```
完整代码如下:
阅读全文