整體思想可以理解為打表,可以通過如下辦法打表(但是相對比較麻煩),還可以直接使用數組,將所有數據直接存儲進來,這種方法相對比較簡單,可以不需要使用高效的素數法;
#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\n" ,re_prime[ i ] ) ; else break ; } printf( "\n" ) ; } } #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\n" ,re_prime[ i ] ) ; else break ; } printf( "\n" ) ; } }