88分求助

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

fanbole @ 2024-07-03 20:12:30

#include<bits/stdc++.h>
using namespace std;
bool ss(int x){
    for(int i=2;i<=sqrt(x);i++){
        if(x%i==0){
            return 0;
        }
    }
    return 1;
}
bool da(int x){
    int a[9],b[9],w=0,s=0;
    while(x!=0){
        w++;
        a[w]=x%10;
        x/=10;
    }
    for(int i=w;i>=1;i--){
        s++;
        b[s]=a[i];
    }
    for(int i=1;i<=w;i++){
        if(a[i]!=b[i]){
            return 0;
        }
    }
    return 1;
} 
int main(){
    int n,b;
    cin>>b>>n;
    for(int i=b;i<=n;i++){
        if(da(i)==1&&ss(i)==1){
            cout<<i<<endl; 
        }
    }
return 0;
}

by Qiu101029 @ 2024-07-03 20:31:47

@fanbole

#include<cstdio>
#include<algorithm>
using namespace std;
bool ch(int x){
    if(x==11){
        return 1;
    }//特判11
    if(x>=10&&x<=99||x>=1000&&x<=9999||x>=100000&&x<=999999){
        return 0;
    }//这些范围内无回文质数(11除外,已经特判,详见题解)
    int n=0,p=x;
    while(p!=0){
        n=n*10+p%10;
        p/=10;
    }
    if(n!=x){
        return 0;
    }//判断回文数
    for(int i=2;i*i<=x;i++){
        if(x%i==0){
            return 0;
        }
    }
    return 1;//判断质数
}//考虑到回文数比质数判断快,回文数的判断放在前面,时间更优
int a,b;
int main(){
    scanf("%d%d",&a,&b);//输入
    b=min(b,9999999);//9999999到100000000之间也没有回文质数
    for(int i=a;i<=b;i++){
        if(ch(i)){
            printf("%d\n",i);//输出
        }
    }
    return 0;
} 

by syy999 @ 2024-07-05 09:22:14

#include<bits/stdc++.h>
using namespace std;
#define int long long
bool p(int a){
    if(a==1) return 0;
    for(int i=2;i<=sqrt(a);i++) if(a%i==0) return 0;
    return 1;
}
bool h(int a){
    int f=0,t=a;
    while(t!=0){
        f=f*10+t%10;
        t=t/10;
    }
    if(f==a) return 1;
    else return 0;
}
signed main(){
    int a,b;
    cin>>a>>b;
    for(int i=a;i<=b;i++){
        if(h(i)&&p(i)) cout<<i<<endl;
    }
    return 0;
} 

绿蓝灯亮起


|