看面試經驗的時候看見了這個問題,
首先名詞解釋:
迴文數:就是一個數從前看和從後看是一樣的,比如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 else29 return 0;30 }31 32 int main()33 {34 /**35 迴文質數的要求:36 1 位元必須為奇數37 2 迴文數 + 質數38 3 唯一例外:1139 **/40 // 直接列印1141 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,等等奇數位,所以可以少掉很多迴圈啦.