Prime Palindromes--迴文+素數判斷

分析:由於數據已經大於10的5次方,我們不能打表,所以,只能先暴力枚舉出所有迴文數,然後再判斷是否爲素數


Code:

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
 
int pri[10000];
int cnt;
 
bool isPrime(int n) {
    int sqr = sqrt(n*1.0);
    for(int i = 2; i <= sqr; i++)
        if(n%i == 0) return false;
    return true;
}
 
void three() {
    for(int d1 = 1; d1 <= 9; d1 += 2)
        for(int d2 = 0; d2 <= 9; d2++) {
            int pp = d1*100 + d2*10 + d1;
            if(isPrime(pp))
                pri[cnt++] = pp;
        }
}
 
void four() {
    for(int d1 = 1; d1 <= 9; d1 += 2)
        for(int d2 = 1; d2 <= 9; d2++) {
            int pp = d1*1000 + d2*100 + d2*10+ d1;
            if(isPrime(pp))
                pri[cnt++] = pp;
        }
}
void five() {
    for(int d1 = 1; d1 <= 9; d1 += 2)
        for(int d2 = 0; d2 <= 9; d2++) 
            for(int d3 = 0; d3 <= 9; d3++){
                int pp = d1*10000 + d2*1000 + d3*100 + d2*10 + d1;
                if(isPrime(pp))
                    pri[cnt++] = pp;
            }
}
 
void six() {
    for(int d1 = 1; d1 <= 9; d1 += 2)
        for(int d2 = 0; d2 <= 9; d2++) 
            for(int d3 = 0; d3 <= 9; d3++){
                int pp = d1*100000 + d2*10000 + d3*1000 + d3*100 + d2*10 + d1;
                if(isPrime(pp))
                    pri[cnt++] = pp;
            }
}
 
void seven() {
    for(int d1 = 1; d1 <= 9; d1 += 2)
        for(int d2 = 0; d2 <= 9; d2++) 
            for(int d3 = 0; d3 <= 9; d3++) 
                for(int d4 = 0; d4 <= 9; d4++) {
                    int pp = d1*1000000 + d2*100000 + d3*10000 + d4*1000 + d3*100 + d2*10 + d1;
                    if(isPrime(pp))
                        pri[cnt++] = pp;
                }
}
 
void eight() {
    for(int d1 = 1; d1 <= 9; d1 += 2)
        for(int d2 = 0; d2 <= 9; d2++) 
            for(int d3 = 0; d3 <= 9; d3++) 
                for(int d4 = 0; d4 <= 9; d4++) {
                    int pp = d1*10000000 + d2*1000000 + d3*100000 + d4*10000 + d4*1000 + d3*100 + d2*10 + d1;
                    if(isPrime(pp))
                        pri[cnt++] = pp;
                }
}
 
 
int main() {
    int a, b;
    cnt = 0;
    pri[cnt++] = 5;
    pri[cnt++] = 7;
    pri[cnt++] = 11;
    three();
    four();
    five();
    six();
    seven();
    eight();
    while(~scanf("%d%d", &a, &b)) {
        for(int i = 0; i < cnt; i++) {
            if(pri[i] > b) break;
            if(pri[i] >= a && pri[i] <= b)
                printf("%d\n", pri[i]);
        }
    }
    return 0;
}


發佈了172 篇原創文章 · 獲贊 15 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章