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