该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是我求10亿内回文素数的代码,用的是递归产生回文。
#include
#include
char num[10];
int p[3402] = {2, 3, 5};
int total = 0;
int creat_prime(int n,int t)
{
int i, j, gab = 2;
for (i = 7; i <= n; i += gab ^= 6)
{
for (j = 0; p[j]*p[j]<=i && i%p[j]; j++);
if (p[j] * p[j] > i) p[t++] = i;
}
return t;
}
char is_prime(int n)
{
int i;
if (n
return 0;
for (i = 0; p[i]*p[i] <= n; i++)
if (n % p[i] == 0)
return 0;
return 1;
}
void pa(int s, int l)
{
int i;
if (l >> 1 >= (l & 1 ^ 1) + s)
{
for (i = 0 + !s; i
{
num[s] = num[l-s-1] = i;
pa(s+1, l);
}
}
else
{
int j, k;
k = 1;
for (i = j = 0; j
i += k * num[j];
if (is_prime(i))
{
printf("%d\n", i);
total++;
}
}
}
int main(void)
{
int i;
clock_t t = clock();
freopen("1.txt", "w", stdout);
creat_prime(31630, 3);
puts("2");
for (i = 1; i
pa(0, i);
fprintf(stderr, "Total: %d\n", total);
fprintf(stderr, "Time: %f\n", 1.0 * (clock() - t) / CLOCKS_PER_SEC);
return 0;
}