用C语言写一个代码实现:输入俩个正素数,输出逐行输出区间[n,m]中所有符合条件的素数。条件如下:如果这个素数用最高位及最低位做分割后的数仍然都是素数,并且其各位数之和还是素数,则输出“amazing”,如果只是用最高位或者最低位做分割后的数是素数,但各位数之和不是素数,则输出“good”。
时间: 2024-02-27 09:58:35 浏览: 73
以下是用C语言实现的代码,实现了您所描述的功能:
```c
#include <stdio.h>
#include <math.h>
// 判断一个数是否为素数
int is_prime(int n) {
if (n <= 1) {
return 0;
}
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
// 计算一个数的各位数之和
int digit_sum(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
int main() {
int n, m;
printf("请输入区间的左右端点,以空格分隔:");
scanf("%d %d", &n, &m);
printf("符合条件的素数有:\n");
for (int i = n; i <= m; i++) {
if (is_prime(i)) {
int first = i / (int)pow(10, (int)log10(i)); // 最高位
int last = i % 10; // 最低位
int sum = digit_sum(i); // 各位数之和
// 判断最高位和最低位是否都是素数
int first_is_prime = is_prime(first);
int last_is_prime = is_prime(last);
// 判断各位数之和是否为素数
int sum_is_prime = is_prime(sum);
// 输出结果
if (first_is_prime && last_is_prime && sum_is_prime) {
printf("%d amazing\n", i);
} else if (first_is_prime || last_is_prime) {
printf("%d good\n", i);
}
}
}
return 0;
}
```
运行时,程序会要求您输入区间的左右端点,以空格分隔。程序会逐行输出区间[n,m]中所有符合条件的素数,并且在素数后面输出对应的“amazing”或“good”字符串。
阅读全文