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

HDU1431:素數回文

編輯:C++入門知識

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; 

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