程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu1043-素數回文

hdu1043-素數回文

編輯:C++入門知識

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

 

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved