看面試經驗的時候看見了這個問題,
首先名詞解釋:
回文數:就是一個數從前看和從后看是一樣的,比如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,等等奇數位,所以可以少掉很多循環啦.