#include <stdio.h>
#include <string.h>
#include <math.h>
int check_num(int);
void split(int num, int a[]);
int check_num(int num) //判质数
{
if (num == 2)
{
return 1;
}
if (num == 1)
{
return 0;
}
int i, j, k;
k = num;
j = sqrt(num + 1);
for (i = 2; i <= j; i++)
{
if (k % i == 0)
{
return 0;
}
}
return 1;
}
void split(int num, int a[]) // 将数字各个位数存到a中
{
char str[20];
int i, len;
sprintf(str, "%d", num);
len = strlen(str);
for (i = 0; i < len; i++)
{
a[i] = str[i] - '0';
}
}
main()
{
char str[32];
int i, j, k, m, len, flag = 1;
int n = 11, count = 0, a[32];
while (1)
{
n += 2;
if (count == 11)
{
break;
}
if (check_num(n))
{
split(n, a);
sprintf(str, "%d", n);
len = strlen(str);
k = len - 1;
j = 0;
for (i = 0; i < len - 1; i++)//从左边截去
{
j += a[k--] * pow(10, i);
if (check_num(j) == 0)
{
flag = 0;
break;
}
}
if (flag)
{
j = 0;
for (i = 0; i < len - 1; i++)//从右边边截去
{
j += a[i];
if (check_num(j) == 0)
{
flag = 0;
break;
}
j *= 10;
}
}
if (flag)
{
count++;
printf("%d ", n);
}
}
flag = 1;
}
}
秒出答案,判质数用欧拉筛法应该更快
答案:23 37 53 73 313 317 373 797 3137 3797 739397 |