题目描述 因为 151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。 写一个程序来找出范围 [a,b](5≤a<b≤100,000)(一百万)间的所有回文质数。 输入格式 第一行输入两个正整数 a 和 b c语言
时间: 2024-11-27 21:22:11 浏览: 38
题目要求你编写一个C语言程序,该程序的任务是在给定范围内(5至100,000)寻找所有的回文质数。回文质数是指同时满足既是质数又是回文数的数字。以下是解决这个问题的一个基本思路:
首先,你需要创建两个函数:
1. **isPalindrome()** - 检查一个数是否为回文,即判断它从前往后读和从后往前读是否一样。
2. **isPrime()** - 检查一个数是否为质数。
然后,遍历给定的范围 `[a, b]`,对于每一个数,先检查是否为质数,如果是,再检查是否为回文。如果是回文质数,则输出这个数。
```c
#include <stdio.h>
#include <stdbool.h>
// 判断一个数是否为回文
bool isPalindrome(int num) {
int rev = 0, original_num = num;
while (num > rev) {
rev = rev * 10 + (num % 10);
num /= 10;
}
return original_num == rev || original_num == rev * 10;
}
// 判断一个数是否为质数
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;
}
// 主函数用于查找并打印回文质数
void findPalindromicPrimes(int a, int b) {
for (int i = a; i <= b; i++) {
if (isPrime(i) && isPalindrome(i))
printf("%d ", i); // 输出回文质数
}
}
int main() {
int a, b;
scanf("%d%d", &a, &b);
findPalindromicPrimes(a, b);
return 0;
}
```
阅读全文