思路
这里需要解决两个问题:
- 什么是素数
- 什么是回文数
素数:素数一般指质数,质数定义是一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;
回文数:任意的整数,当从左向右读与从右向左读是相同的;
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
求1000以内的所有回文素数。
*/
#define bool int
#define true 1
#define false 0
#define N 1000
bool IsPrime(int x) {
int i = 0;
for (i = 2; i * i <= x; i++) {
if (x % i == 0) {
return false;
}
}
}
bool IsPalindromic(char* s) {
int n = strlen(s);
int i = 0;
for (i = 0; i < n / 2; i++) {
if (s[i] != s[n - 1 - i]) {
return false;
}
}
return true;
}
int main() {
// 最小的素数为2
int i = 0;
int rank = 0;
char s[16] = {0};
for (i = 2; i <= N; i++) {
itoa(i, s, 10);
if (IsPrime(i) && IsPalindromic(s)) {
printf("%d is %d\n", rank++, i);
}
}
return 0;
}