66分TLE求助ToT

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

Greeper @ 2024-07-17 12:29:32

#include<bits/stdc++.h>
using namespace std;
bool t(int n)
{
    int n_=0;
    int x=n;
    while(x)
    {
        n_*=10;
        n_+=x%10;
        x/=10;
    }
    return (n==n_);
}
bool z(int a)
{
    for(int i=2;i<a;i++)
    {
        if(a%i==0)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    int l,r;
    cin>>l>>r;
    for(int i=l;i<=r;i++)
    {
        if(t(i))
        {
            if(z(i))
            {
                cout<<i<<endl;
            }
        }
    }
    return 0;
}

by Program_A2 @ 2024-07-18 13:22:42

@Greeper 我也是,3个TLE,你可以暴力过,我就是这样的,过了(注:数组每个都赋值,建议另写一个程序得到题目范围里所有的回文质数,每个之间一个空格,然后全选,放入数组)


by Program_A2 @ 2024-07-18 13:25:04

这题正常思路一般很难过的,我们这群菜鸟只能打表暴力过


by luoguwoshinibaba @ 2024-07-20 10:48:56

@Greeper 首先,两个if可以分开;其次,输入输出改一下。再多加点特判速度快一些(偶数不可能有回文质数)


by fjj54188 @ 2024-07-20 10:50:58

#include<bits/stdc++.h>
using namespace std;
int f(int n){
    int i,k=sqrt(n);
    if(n<2){
        return 0;
    }

    else if(n==2){
        return 1;
    }
    else{
        for(i=2;i<=k;i++){
            if(n%i==0)
                return 0;
        }
    }
    return 1;
}
int h(int n){
    int i,j,cnt=0,t=n,f=1;
    while(t){
        cnt++;
        t/=10;
    }
    t=n;
    if(cnt==1)
        return 1;
    int a[10005];
    for(i=0;i<cnt;i++){
        a[i]=t%10;
        t/=10;
    }
    for(i=0;i<cnt;i++){
        j=cnt-i-1;
        if(a[i]!=a[j])
            f=0;
    }
    return f;
}
int main(){
    long long a,b,i;
    cin>>a>>b;
    for(i=a;i<=b;i++){
        if(i%2!=0){
            if(h(i)){
                if(f(i)){
                    cout<<i<<endl;
                }

            }
        }
        if(i==9989899)
            break;
    }
    return 0;
} 

|