求助,最后个点TLE

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

yyc1117 @ 2024-05-06 21:08:51

直接先判断回文在判断质数,怎么调啊?

#include<bits/stdc++.h>
using namespace std;
int a,b,c[11];
int main(){
    cin>>a>>b;
    for(int i=a;i<=b;i++){
        int s=i,k=0;
        bool flag=true;
        while(s){
            c[++k]=s%10;
            s/=10;
        }
        for(int j=1,l=k;l-j>=1;j++,l--){
            if(c[j]!=c[l]){
                flag=false;
                break;
            }
        }
        if(flag){
            for(int j=2;j*j<=i;j++){
                if(i%j==0){
                    flag=false;
                    break;
                }
            }
        }
        if(flag)cout<<i<<endl;
        memset(c,0,sizeof(c));
    }
    return 0;
}

救救蒟蒻吧o(╥﹏╥)o


by return_TLE @ 2024-05-06 21:13:18

@yyc1117 嗯这个东西应该用正常的办法就会tle掉一个点的,如果一定要ac的话可以把所有的回文质数写到一个数组里面然后直接查数组


by czxuyang @ 2024-05-06 21:13:57

上面给了提示,我就给个答案吧

#include<bits/stdc++.h> 
using namespace std;
bool ispdrome(int x){
    int s=0,k=x;
    while(k!=0){
        s*=10;
        s+=k%10;
        k/=10;
    }
    if(s==x) return true;
    return false;
}
bool isprime(int x){
    for(int i=3;i<=sqrt(x);i=i+2){
        if(x%i==0) return false;
    }
    return true;
}
int main(){
    int a,b;
    cin>>a>>b;
    if(a%2==0)a++;
    if(b>=10000000) b=10000000;
    for(int i=a;i<=b;i=i+2){
        if(ispdrome(i) && isprime(i)){
            cout<<i<<endl;
        }
    }
    return 0;
}

by yyc1117 @ 2024-05-09 21:13:04

@return_TLE 谢谢


by yyc1117 @ 2024-05-09 21:13:36

@czxuyang 谢谢


|