22分求助

P1217 [USACO1.5] 回文质数 Prime Palindromes

baixk @ 2023-11-09 20:19:17

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;
    if(a<=5&&b>=5)cout<<5<<endl;
    if(a<=7&&b>=7)cout<<7<<endl;
    if(a<=11&&b>=11)cout<<11<<endl;
    for(int d1=1;d1<=9;d1+=2)
        for(int d2=0;d2<=9;d2++){
            int n=101*d1+10*d2;
            if(n<a)continue;
            if(n>b)return 0;
            int f=1;
            for(int j=3;j*j<=n;j++)
                if(n%j==0){
                    f=0;
                    break;
                }
            if(f)cout<<n<<endl;
        }
    for(int d1=1;d1<=9;d1+=2) 
        for(int d2=0;d2<=9;d2++)
            for(int d3=0;d3<=9;d3++){
                int n=10001*d1+1010*d2+100*d3;
                if(n<a)continue;
                if(n>b)return 0;
                int f=1;
                for(int j=3;j*j<=n;j++)
                    if(n%j==0){
                        f=0;
                        break;
                    }
                if(f)cout<<n<<endl;
            }
    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 n=1000001*d1+100010*d2+10100*d3+1000*d4;
                    if(n<a)continue;
                    if(n>b)return 0;
                    int f=1;
                    for(int j=3;j*j<=n;j++)
                        if(n%j==0){
                            f=0;
                            break;
                    if(f)cout<<n<<endl;
                    }
                }
    return 0;
}

by 帝都_henry26268 @ 2023-11-09 21:16:53

建议不采取题目的提示,思路可以参考我这个代码写的

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int f[1000000]={0};
int hw(int a){
    int x=a;
    while(x){
        a=a*10+x%10;
        x/=10;
    }
    return a;
}
int hw2(int a){
    int x=a/10;
    while(x){
        a=a*10+x%10;
        x/=10;
    }
    return a;
}
bool prime(int a){
    if(a%2==0&&a!=2){
        return 0;
    }
    for(int i = 2;i <= sqrt(a);i++){
        if(a % i == 0){
            return 0;
        } 
    }
    return 1;
}
int main(){
    int a,b,cnt=0;
    cin >> a;
    cin >> b;
    for(int i = 1;i <= 100000;i++){
        f[++cnt] = hw(i);
        f[++cnt] = hw2(i);
    }
    sort(f+1,f+cnt+1);
    for(int i = 1;i <= cnt;i++){
        if(f[i]>b){
            return 0;
        }
        else if(f[i]>=a&&prime(f[i])){
            cout << f[i] << endl;
        }
    }
    return 0;
}

|