现在的位置: 首页 > 综合 > 正文

C – 查找回文质数

2011年01月03日 ⁄ 综合 ⁄ 共 769字 ⁄ 字号 评论关闭

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

首先名词解释:

回文数:就是一个数从前看和从后看是一样的,比如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,等等奇数位,所以可以少掉很多循环啦.

抱歉!评论已关闭.