求回文素数

1回文素数的定义就是,一个素数, 无论从左到右读,还是从右往左读,他都是同一个数,比如 2, 11 等等

 

回文素数有以下规律

当位数为1时有:

2 3 5 7

当位数为2的时候,仅仅有一个数:

11

当数是4,6,8....2n+2 (n=1,2,3.....)没有该回文素数,因为这些数都可以被11整除

 

以下代码为求1<=n <=9  位数的回文数求发:

 

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. bool isprime(int n)
  5. {
  6.     if (n<2)
  7.     {
  8.         return false;
  9.     }
  10.     else
  11.     {
  12.         for (register int i=2; i<=(int)sqrt(n); i++)
  13.         {
  14.             if (n%i == 0)
  15.             {
  16.                 return false;
  17.             }
  18.         }
  19.         return true;
  20.     }
  21. }
  22. void initprime(int data[], int num)
  23. {
  24.     int flag = 0;
  25.     data[0]=1;
  26.     data[1]=2;
  27.     for (int i=3; i<num; i++)
  28.     {
  29.         flag = 0;
  30.         for (int j=1; data[j]*data[j]<=i;j++)
  31.         {
  32.             if (i%data[j] == 0)
  33.             {
  34.                 flag =1;
  35.                 break;
  36.             }
  37.         }
  38.         if (flag == 0)
  39.         {
  40.             data[0]++;
  41.             data[data[0]] = i;
  42.         }
  43.     }
  44. }
  45. int main()
  46. {
  47.     int num;
  48.     int data[5200];
  49.     int prime[10000];
  50.     int count=0;
  51.     int tempdata = 0;
  52.     int flag = 0;
  53.     initprime(prime,100000);
  54. //    printf("%d",prime[0]);
  55.     while (scanf("%d", &num) != EOF)
  56.     {
  57.         count = 0;
  58.         if (num==1)
  59.         {
  60.             printf("4/n2 3 5 7/n");
  61.             continue;
  62.         }
  63.         else if (num == 2)
  64.         {
  65.                printf("1/n11/n");
  66.                continue;
  67.         }
  68.         else if (num%2 == 0)
  69.         {
  70.               printf("0/n");
  71.               continue;
  72.         }
  73.         else if (num == 3)
  74.         {
  75.             for (int i=1; i<10; i+=2)
  76.             {
  77.                 if (i==5)
  78.                     continue;
  79.                 for (int j=0; j<10; j++)
  80.                 {
  81.                     tempdata = i*101+j*10;
  82.                     for (int s=1; prime[s]*prime[s] <=tempdata; s++)
  83.                     {
  84.                         flag = 0;
  85.                         if (tempdata%prime[s] == 0)
  86.                         {
  87.                             flag = 1;
  88.                             break;
  89.                         }
  90.                     }
  91.                     if ( flag == 0)
  92.                     {
  93.                          data[count++] = tempdata;
  94.                     }
  95.                 }
  96.             }
  97.         }
  98.         else if (num == 5)
  99.         {
  100.             for (int i=1; i<10; i+=2)
  101.             {
  102.                 if (i==5)
  103.                 continue;
  104.                 for (int j=0; j<10; j++)
  105.                 {
  106.                     for (int k=0; k<10; k++)
  107.                     {
  108.                         tempdata = i*10001+j*1010+k*100;
  109.                         for (int s=1; prime[s]*prime[s] <=tempdata; s++)
  110.                         {
  111.                             flag = 0;
  112.                             if (tempdata%prime[s]  == 0)
  113.                             {
  114.                                 flag = 1;
  115.                                 break;
  116.                             }
  117.                         }
  118.                         if ( flag == 0)
  119.                         {
  120.                             data[count++] = tempdata;
  121.                         }
  122.                     }
  123.                 }
  124.             }
  125.         }
  126.         else if (num == 7)
  127.         {
  128.             for (int i=1; i<10; i+=2)
  129.             {
  130.                 if (i==5)
  131.                 continue;
  132.                 for (int j=0; j<10; j++)
  133.                 {
  134.                     for (int k=0; k<10; k++)
  135.                     {
  136.                         for (int l=0; l<10; l++)
  137.                         {
  138.                             tempdata = i*1000001+j*100010+k*10100+l*1000;
  139.                             for (int s=1; prime[s]*prime[s] <=tempdata; s++)
  140.                             {
  141.                                 flag = 0;
  142.                                 if (tempdata%prime[s]  == 0)
  143.                                 {
  144.                                     flag = 1;
  145.                                     break;
  146.                                 }
  147.                             }
  148.                             if ( flag == 0)
  149.                             {
  150.                                 data[count++] = tempdata;
  151.                             }
  152.                         }
  153.                     }
  154.                 }
  155.             }
  156.         }
  157.         else if (num == 9)
  158.         {
  159.             for (int i=1; i<10; i+=2)
  160.             {
  161.                if (i==5)
  162.                 continue;
  163.                 for (int j=0; j<10; j++)
  164.                 {
  165.                     for (int k=0; k<10; k++)
  166.                     {
  167.                         for (int l=0; l<10; l++)
  168.                         {
  169.                             for (int m=0; m<10; m++)
  170.                             {
  171.                                 tempdata = i*100000001+j*10000010+k*1000100+l*101000+m*10000;
  172.                                 for (int s=1; prime[s]*prime[s] <=tempdata; s++)
  173.                                 {
  174.                                     flag = 0;
  175.                                     if (tempdata%prime[s]  == 0)
  176.                                     {
  177.                                         flag = 1;
  178.                                         break;
  179.                                     }
  180.                                 }
  181.                                 if ( flag == 0)
  182.                                 {
  183.                                     data[count++] = tempdata;
  184.                                 }
  185.                             }
  186.                         }
  187.                     }
  188.                 }
  189.             }
  190.         }
  191.         printf("%d/n",count);
  192.         for (int i=0; i<count; i++)
  193.         {
  194.             printf("%d ",data[i]);
  195.         }
  196.         printf("/n");
  197.     }
  198. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值