c语言求回文素数

2021-11-22  本文已影响0人  一路向后

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
上一篇下一篇

猜你喜欢

热点阅读