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,等等奇數位,所以可以少掉很多循環啦.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM