66分,最后3个测试点TLE了怎么办

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

Qiqi_Hun @ 2023-07-12 19:08:10

#include <bits/stdc++.h>
using namespace std;
int a,b;
bool isprime(int x)//判断素数 
{
    for(int i=2;i*i<=x;i++)
    {
        if(x%i==0)
        {
            return false;
        }
    }
    return true;
}
bool ispn(int n)//判断回文数
{
    int x=0,s=n;//拷贝一份
    while(s>0)//各个数位上的数正着加起来跟逆着加起来的和是一样的 
    {
        x=x*10+s%10;
        s/=10;
    }
    if(x==n)
    {
        return true;
    }else
    {
        return false;
    }
}
int main()
{
    cin>>a>>b;
    for(int i=a;i<=b;i++)//没有偶数的回文质数 
    {
        if(i%2==0)
        {
            continue;
        }else if(isprime(i)&&ispn(i))
        {
            cout<<i<<endl;
        }
    }
    return 0;
}

by zvzbpkvo1 @ 2023-07-16 15:31:35

先把isprime(i)&&ispn(i)的顺序改一下(题目提示)

然后开O2就能ac了


by lijuncheng_1207 @ 2023-07-27 18:01:09

@zvzbpkvo1 最后一个点还是TLE

#include <bits/stdc++.h>
using namespace std;
int n,m,cnt;
bool prime(int x){
    for(int i=2;i<=sqrt(x);i++) {
        if(x%i==0)
            return 0;
    }
    return 1;
}
bool flag(int x){
    string s=to_string(x);
    string s1=s;
    reverse(s.begin(),s.end());
    if(s1==s){
        return 1;
    }
    return 0;
}
int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0),cout.tie(0); 
    cin>>n>>m;
    for(int i=n;i<=m;i++) {
        if(flag(i)&&prime(i)){
            cout<<i<<endl;
        }
    }
    return 0;
}

by zvzbpkvo1 @ 2023-07-28 18:09:28

#include <bits/stdc++.h>
using namespace std;
int n,m;
bool prime(int x){
    for(int i=2;i<=sqrt(x);i++) {
        if(x%i==0)
            return 0;
    }
    return 1;
}
bool flag(int n){
    int x=0,s=n;
    while(s>0){
        x=x*10+s%10;
        s/=10;
    }
    if(x==n){
        return true;
    }else{
        return false;
    }
}
int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0),cout.tie(0); 
    cin>>n>>m;
    for(int i=n;i<=m;i++) {
        if(flag(i)&&prime(i)){
            cout<<i<<endl;
        }
    }
    return 0;
}

|