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\n" ,re_prime[ i ] ) ;
else
break ;
}
printf( "\n" ) ;
}
}