找出正整数M和N之间(N不小于M)的所有真素数。 真素数的定义:如果一个正整数P为素数,且其反序也为素数,那么P就为真素数。 例如,11,13均为真素数,因为11的反序还是为11,13的反序为31也为素数。 输入说明 输入两个数M和N,空格间隔,1<=M<=N<=100000。 输出说明 按从小到大输出M和N之间(包括M和N)的真素数,逗号间隔。如果之间没有真素数,则输出No。C语言实现
时间: 2024-02-11 11:09:08 浏览: 167
以下是一个C语言实现:
```c
#include <stdio.h>
#include <stdbool.h>
// 判断一个数是否为素数
bool isPrime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
// 判断一个数的反序是否为素数
bool isReversePrime(int num) {
int reverseNum = 0;
int temp = num;
while (temp > 0) {
reverseNum = reverseNum * 10 + temp % 10;
temp /= 10;
}
return isPrime(reverseNum);
}
// 输出M和N之间的真素数
void printTruePrimes(int M, int N) {
bool hasTruePrimes = false; // 是否存在真素数
for (int i = M; i <= N; i++) {
if (isPrime(i) && isReversePrime(i)) {
hasTruePrimes = true;
printf("%d,", i);
}
}
if (!hasTruePrimes) {
printf("No");
} else {
printf("\b"); // 删除最后一个逗号
}
}
int main() {
int M, N;
printf("请输入两个整数(空格隔开): ");
scanf("%d %d", &M, &N);
printTruePrimes(M, N);
return 0;
}
```
首先定义了三个函数:`isPrime`用于判断一个数是否为素数,`isReversePrime`用于判断一个数的反序是否为素数,`printTruePrimes`用于输出M和N之间的所有真素数。
在`printTruePrimes`函数中,使用一个`hasTruePrimes`变量记录是否存在真素数。然后从M到N遍历所有的数,如果该数同时是素数和反序数也是素数,则输出该数并将`hasTruePrimes`置为true。最后判断`hasTruePrimes`的值,如果为false则输出"No",否则删除最后一个逗号输出结果。
在主函数中,首先通过`scanf`获取用户输入的M和N,然后调用`printTruePrimes`函数输出结果。
阅读全文