1.问题描述
所谓回文素数指的是,对一个整数n从左向右和从右向左读都相同,且n为素数.
求所有不超过1000的回文素数.
2.源码实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*求反序数*/
int inverse(int a)
{
char b[10];
int n = 0;
int c = 0;
int i = 0;
memset(b, 0x00, sizeof(b));
while(a > 0)
{
b[i] = a % 10;
a /= 10;
i++;
}
n = i;
for(i=0; i<n; i++)
{
c = 10 * c + b[i];
}
return c;
}
/*求平方根*/
int isqrt(int a)
{
int i;
if(a == 1)
{
return 1;
}
for(i=1; i<a; i++)
{
if(i*i > a)
{
break;
}
}
return i-1;
}
/*判断是否为质数*/
short isPrime(int a)
{
int u;
int i;
if(a == 1)
{
return 0;
}
u = isqrt(a);
for(i=2; i<=u; i++)
{
if(a % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int n = 10000;
int i = 0;
int j = 1;
for(i=1; i<1000; i++)
{
if(isPrime(i) && inverse(i) == i)
{
if(j % 10 == 0)
{
printf("%3d\n", i);
}
else
{
printf("%3d ", i);
}
j++;
}
}
if(j % 10 != 0)
{
printf("\n");
}
return 0;
}
3.编译源码
$ gcc -o test test.c -std=c89
4.运行及其结果
$ ./test
2 3 5 7 11 101 131 151 181 191
313 353 373 383 727 757 787 797 919 929
网友评论