zoukankan      html  css  js  c++  java
  • C 查找回文质数

    看面试经验的时候看见了这个问题,

    首先名词解释:

    回文数:就是一个数从前看和从后看是一样的,比如121,12321

    质数:就是一个只能被1和它自身整除.

    回文质数:就是又是回文数又是质数.

    好的,概念解释完了,我们就写程序了.

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <math.h>
     4 /**
     5 判断m是否为质数
     6 @return 1:质数,0:不是质数
     7 **/
     8 int ss(int m){
     9     for(int i=2;i<=sqrt(m);i++)
    10         if(! (m%i))
    11             return 0;
    12     return 1;
    13 }
    14 
    15 /**
    16 判断m是否为回文数
    17 @return 1:回文,0:不是回文
    18 **/
    19 int huiwen(int m){
    20     int x=0,y;
    21     y=m;
    22     while(y){
    23         x = x*10 + y % 10;
    24         y /= 10;
    25     }
    26     if (m==x)
    27         return 1;
    28     else
    29         return 0;
    30 }
    31 
    32 int main()
    33 {
    34     /**
    35     回文质数的要求:
    36     1 位数必须为奇数
    37     2 回文数 + 质数
    38     3 唯一例外:11
    39     **/
    40     // 直接打印11
    41     printf("回文质数:%d\r\n",11);
    42     int j = 1; //基数
    43     int k = 3; //边界
    44     int l;
    45     while (j < k){
    46         l = pow(100,j);
    47         for (int i=l+1;i < 10 * l;i++,i++)
    48             if(huiwen(i)&&ss(i))
    49                 printf("回文质数:%d\r\n",i);
    50         j++;
    51     }
    52 }

    为什么要奇数位的回文数呢?因为偶数位的回文数注定会被11整除,所以肯定不是质数.

    那么我们这里只需要考虑101-999,10001-99999,等等奇数位,所以可以少掉很多循环啦.

  • 相关阅读:
    【模板】Bellman—Fort 单源最短路径算法
    【模板 && 拓扑】 Dijkstra 单源最短路径算法
    字符序列
    装载问题【回溯法】
    工作分配问题【回溯法】
    『模板』 子集生成
    [Codeforces]852A
    [Codeforces]852I
    [UOJ]#36. 【清华集训2014】玛里苟斯
    [Codeforces]848C
  • 原文地址:https://www.cnblogs.com/huangjacky/p/2460710.html
Copyright © 2011-2022 走看看