现在的位置: 首页 > 综合 > 正文

hdu1043-素数回文

2013年03月20日 ⁄ 综合 ⁄ 共 803字 ⁄ 字号 评论关闭

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" ) ;
	}
}

抱歉!评论已关闭.