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编译的代码就是这么做的。
作者:emacsun
出处:http://www.cnblogs.com/chaolong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。