http://acm.hdu.edu.cn/showproblem.php?pid=1431
整体思想可以理解为打表,可以通过如下办法打表(但是相对比较麻烦),还可以直接使用数组,将所有数据直接存储进来,这种方法相对比较简单,可以不需要使用高效的素数法;
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; bool prime[9989900] ; int re_prime[ 1000 ] ; void Prime( )//高效判断素数法:所有和数都等于N个素数的乘积 { int i , j ; /* for( i = 5 ; i <= 10000 ; ++i ) prime[ i ] = 0 ;*/ i = 2 ; for( j = i * i ; j < 9989900 ; j += i ) prime[ j ] = true ; for( i = 3 ; i < 10000 ; i += 2 ) { if( prime[ i ] ) continue ; for( j = i * i ; j < 9989900 ; j += i ) prime[ j ] = true ; } } bool test( int temp ) { int a = temp ; int b = 0 ; while( temp ) { b = b * 10 ; b += temp % 10 ; temp /= 10 ; } return a == b ; } int main() { int a , b , k = 0 , i , j; Prime(); for( i = 5 ; i < 9989900 ; i += 2 ) if( !prime[ i ] && test( i ) ) re_prime[ k++ ] = i ; while( scanf( "%d%d" , &a , &b ) != EOF ) { for( i = 0 ; i < k ; ++i ) { if( re_prime[ i ] < a ) continue ; else if( re_prime[ i ] <= b ) printf( "%d " ,re_prime[ i ] ) ; else break ; } printf( " " ) ; } }