100c之33:回文素数

问题

回文素数:求不超过1000的回文素数。所谓回文素数是指,对一个整数n从左向右和从右向左读都是一样的素数。

分析

穷举。

解决方案

 1:  /**
 2:   * @file   033cprime.c
 3:   * @author Chaolong Zhang <emacsun@163.com>
 4:   * @date   Wed Jun  5 18:37:44 2013
 5:   * 
 6:   * @brief  回文素数:求不超过1000的回文素数。所谓回文素数是指,对一个整数n从左向右和从右向左读都是一样的素数。
 7:   * 
 8:   * 
 9:   */
10:  #include <stdio.h>
11:  int is_prime( int );
12:  
13:  int main(int argc, char *argv[])
14:  {
15:      int i,j,t,k,s;
16:      printf ("Following are palindrome primes not greater than 1000\n");
17:      for (i=0; i<=9 ; i++)
18:      {
19:          for (j=0; j <= 9; j++)
20:          {
21:              for (k=0; k <= 9; k++)
22:              {
23:                  s=i*100 + j*10 + k;
24:                  t=k*100 + j*10 + i;
25:                  if( 0==i && 0 == j ) t/=100;
26:                  else if( 0 == i ) t/=10;
27:                  if ((  s > 10 ) && ( s == t ) && is_prime( s ) )
28:                      printf ("%d\t\n",s);
29:              }
30:  
31:          }
32:  
33:      }
34:      return 0;
35:  }
36:  
37:  
38:  int is_prime ( int n )
39:  {
40:      int i;
41:      int flag=1;
42:      if (n==2 || n==3)
43:          return flag;
44:      for ( i = 2; i <= ( n/2 + 1 ); ++i) 
45:          if (n%i == 0 ) {
46:              flag=0;return flag;
47:          }
48:  }

输出结果

Following are palindrome primes not greater than 1000
11      
101     
131     
151     
181     
191     
313     
353     
373     
383     
727     
757     
787     
797     
919     
929

题后语

在使用 i j k 三个变量构造 三位数时发现for循环的哑元变量加一过程很诡异:如果是(i++),则在本次for循环结束后再进行加一,如果是(++i)则判断完条件后就把i加一。gcc编译的代码就是这么做的。

posted @ 2013-06-05 19:02  emacsun  阅读(230)  评论(0编辑  收藏  举报