题目描述
求11到n之间(包括n),既是素数又是回文数的整数有多少个。
输入
一个大于11小于1000的整数n。
输出
11到n之间的素数回文数个数。
样例
输入 23
输出 1
提示 回文数指左右对称的数,如:292,333。 来源/分类 循环结构
题解
#include <stdio.h>
int is_prime(int num) {
int i;
if (num == 2 || num == 3) {
return 1;
}
if (num == 1 || num % 2 == 0) {
return 0;
}
for (i = 3; i * i <= num; i += 2) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
int is_palindrome(int num) {
int rev = 0, tmp = num;
while (tmp != 0) {
rev = rev * 10 + tmp % 10;
tmp /= 10;
}
return num == rev;
}
int main() {
int n, count = 0, i;
scanf("%d", &n);
for (i = 11; i <= n; i++) {
if (is_prime(i) && is_palindrome(i)) {
count++;
}
}
printf("%d\n", count);
return 0;
}
这个题目要求找到11到n之间(包括n)既是素数又是回文数的整数个数。我们可以先写两个函数 is_prime
和 is_palindrome
来判断一个数字是否是素数和是否是回文数。
- 函数
is_prime
判断一个数字是否是素数,返回值为 1 表示是素数,返回值为 0 表示不是素数。 - 函数
is_palindrome
判断一个数字是否是回文数,返回值为 1 表示是回文数,返回值为 0 表示不是回文数。
在 main
函数中,我们先读入输入的整数 n
。然后使用循环遍历 11 到 n 之间的每个数字,对于每个数字,如果它既是素数又是回文数,就将计数器 count
加 1。最后输出 count
的值即可。