找出正整数M和N之间(N不小于M)的所有真素数。 真素数的定义:如果一个正整数P为素数,且其反序也为素数,那么P就为真素数。 例如,11,13均为真素数,因为11的反序还是为11,13的反序为31也为素数。 输入说明 输入两个数M和N,空格间隔,1<=M<=N<=100000。 输出说明 按从小到大输出M和N之间(包括M和N)的真素数,逗号间隔。如果之间没有真素数,则输出No。 输入样例复制 10 35 输出样例复制 11,13,17,31。C语言实现
时间: 2024-02-11 15:09:24 浏览: 58
好的,我能够帮你解决这个问题。以下是C语言的实现代码:
```
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAXN 100000
bool is_prime(int n) // 判断n是否为素数
{
if (n <= 1) return false;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) return false;
}
return true;
}
int reverse(int n) // 翻转n
{
int res = 0;
while (n > 0) {
res = res * 10 + n % 10;
n /= 10;
}
return res;
}
bool is_true_prime(int n) // 判断n是否为真素数
{
int rev = reverse(n);
return is_prime(n) && is_prime(rev) && n != rev;
}
int main()
{
int m, n;
scanf("%d %d", &m, &n);
bool flag = false;
for (int i = m; i <= n; i++) {
if (is_true_prime(i)) {
if (flag) printf(",");
printf("%d", i);
flag = true;
}
}
if (!flag) printf("No");
return 0;
}
```
这个程序首先定义了三个函数:`is_prime`用于判断一个数是否为素数,`reverse`用于翻转一个数,`is_true_prime`用于判断一个数是否为真素数。
主函数中首先读取输入的两个数M和N,然后从M枚举到N,对于每一个数i,如果它是真素数,则输出它。输出时需要注意,如果前面已经输出了一个数,则需要在它前面加上一个逗号。如果没有真素数,则输出"No"。
希望能够帮到你!
阅读全文