用c语言 用函数编程,一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:1不是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。例如,617,17,7都是素数,因此617是逆向超级素数,尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。打印出[100,999]之内的所有逆向超级素数。
时间: 2023-07-14 19:12:15 浏览: 310
C语言程序设计-找出一个大于给定整数且紧随这个整数的素数,并作为函数值返回;
5星 · 资源好评率100%
以下是用C语言编写的程序,可以实现打印[100,999]之内的所有逆向超级素数的功能:
```c
#include <stdio.h>
#include <stdbool.h>
// 判断一个数是否为素数
bool is_prime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
// 判断一个数是否为逆向超级素数
bool is_reverse_super_prime(int n) {
int digits = 0; // 数字位数
int temp = n;
while (temp > 0) {
if (temp % 10 == 0) {
return false; // 包含有零
}
digits++;
temp /= 10;
}
for (int i = 1; i <= digits; i++) {
temp = n / (int)(pow(10, i)); // 去掉最高位
if (!is_prime(temp)) {
return false;
}
}
return true;
}
int main() {
printf("所有逆向超级素数:\n");
for (int i = 100; i <= 999; i++) {
if (is_reverse_super_prime(i)) {
printf("%d\n", i);
}
}
return 0;
}
```
程序中使用了两个函数 `is_prime` 和 `is_reverse_super_prime`,分别用于判断一个数是否为素数和逆向超级素数。在 `is_reverse_super_prime` 函数中,首先判断该数是否包含有零,如果包含有零则直接返回 `false`。然后逐一去掉最高位、次高位、第三高位……并判断是否为素数,如果其中任意一位不是素数,则返回 `false`,否则返回 `true`。
在 `main` 函数中,依次枚举 [100, 999] 范围内的所有整数,并调用 `is_reverse_super_prime` 函数判断是否为逆向超级素数,如果是则打印出来。
阅读全文