求助:只能得出1000以内的回文质数
查看原帖
求助:只能得出1000以内的回文质数
470334
Chill6楼主2021/8/28 17:02
#include<iostream>
using namespace std;
int a, b, d[1000000], k, f, g, h, j;
bool doit(int c){
    for(int i = 2; i * i <= c; i++)
        if(c % i == 0) return 0;
    return 1;
}
bool two(int e){
    int add = 100 * g + 10 * f + g;
    if(doit(add)) return 1;
    else return 0;
}
bool three(int e){
    int add = 10000*h+ 1000*g+ 100*f+10*g+h;
    if(doit(add)) return 1;
    else return 0;
}
bool four(int e){
    int add = 1000000*j+100000*h+10000*g+1000*f+100*g+10*h+j;
    if(doit(add)) return 1;
    else return 0;
}
int main(){
    cin >> a >> b;
    d[k++] = 5;
    d[k++] = 7;
    for(int i = 1; i <= 9999; i++){
         f = i %10;
         g = i /10 %10;
         h = i/100 %10;
         j = i/1000;
        if(i==1) d[k++]= 11;
        else if(i>=10 && i <100)
            if(two(i)) d[k++] = 100 * g + 10 * f + g;
        else if(i>=100 && i < 1000){
            if(three(i)) d[k++] = 10000*h+ 1000*g+ 100*f+10*g+h;
        }
        else if(i>=1000&&i<=9999){
            if(four(i)) d[k++] = 1000000*j+100000*h+10000*g+1000*f+100*g+10*h+j;
        }
    }
    for(int i = 0; i < k; i++)
        if(a <= d[i] && d[i] <= b)cout << d[i] << endl;
        else break;
    return 0;
}
2021/8/28 17:02
加载中...