c语言函数一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数。从键盘输入一系列正整数,输入以0结束。按输入顺序输出这些数中的美素数。数据保证输入序列中至少有1个美素数。 输入格式: 从键盘输入一系列正整数,输入 0 表示输入结束。 输出格式: 按输入顺序输出这些数中的美素数。每个数占一行。
时间: 2024-02-16 09:00:25 浏览: 33
好的,这是一个关于美素数的问题。下面是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
bool is_prime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int digit_sum(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
bool is_beautiful_prime(int n) {
return is_prime(n) && is_prime(digit_sum(n));
}
int main() {
int n;
scanf("%d", &n);
while (n != 0) {
if (is_beautiful_prime(n)) {
printf("%d\n", n);
}
scanf("%d", &n);
}
return 0;
}
```
思路如下:
1. 定义一个判断素数的函数 `is_prime`,判断一个数是否为素数;
2. 定义一个计算数字各位数字之和的函数 `digit_sum`;
3. 定义一个判断美素数的函数 `is_beautiful_prime`,判断一个数是否为美素数,即同时为素数,且各位数字之和也为素数;
4. 在 `main` 函数中,循环读入每个正整数,如果是美素数则输出,并继续循环读入下一个数;如果输入的数为 0,则跳出循环,程序结束。