当前位置:编程学习 > C/C++ >>

HDU1431:素数回文

Problem Description
xiaoou33对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在xiaoou333想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);

 


Input
这里有许多组数据,每组包括两组数据a跟b。
 


Output
对每一组数据,按从小到大输出a,b之间所有满足条件的素数回文数(包括a跟b)每组数据之后空一行。
 


Sample Input
5 500


Sample Output
5
7
11
101
131
151
181
191
313
353
373
383

 

 

说实话,不得不惊叹于别人的思想

由于int型占四个字节

为了不占空间,定义数组为bool型来处理

 

 

[cpp]
#include <stdio.h>  
#include <stdio.h>  
using namespace std; 
 
bool a[9989900]; 
int prime[1005]; 
 
void set() 

    int i,j; 
    for(i = 2; i<=9989899; i+=2) 
        a[i] = true; 
    for(i = 3; i<=3161; i++) 
    { 
        if(a[i]) 
            continue; 
        for(j = i+i; j<=9989899; j+=i) 
            a[j] = true; 
    } 

 
int huiwen(int n) 

    int a = 0,b = n; 
    while(b) 
    { 
        int r = b%10; 
        a = a*10+r; 
        b/=10; 
    } 
    if(a == n) 
        return 1; 
    return 0; 

 
int main() 

    int n,m,i,k = 2; 
    set(); 
    prime[0] = 5; 
    prime[1] = 7; 
    for(i = 11; i<=9989899; i+=2) 
    { 
        if(!a[i] && huiwen(i)) 
            prime[k++] = i; 
    } 
    while(~scanf("%d%d",&n,&m)) 
    { 
        for(i = 0; i<k; i++) 
        { 
            if(prime[i]<n) 
                continue; 
            else if(prime[i]>m) 
                break; 
            else 
                printf("%d\n",prime[i]); 
        } 
        printf("\n"); 
    } 
    return 0; 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,