TLE!88分。。。

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

Jzz3778__MC @ 2024-07-09 21:20:58

#include<iostream>
using namespace std;
int hui(int x)
{
    int a[9],rt=0;
    while(x!=0)
    {
        rt++;
        a[rt]=x%10;
        x/=10;
    }
    int lt=1;
    while(lt<=rt)
    {
        if(a[lt]!=a[rt])
        {
            return 0;
        }
        lt++,rt--;
    }
    return 1;
}
int bb(int x)
{
    for(int i=2; i * i<=x; i++)
    {
        if(x%i==0)
        {
            return 0;
        }
    }
    return 1;
}
int main(){
    int n,a;
    cin>>a>>n;
    for(int i=a;i<=n;i++)
        if(hui(i))
            if(bb(i))
            cout<<i<<endl;
return 0;
}

第1次:33分

第2次:66分

第三次:88分

我太难了!


by Mugino_Shizuri @ 2024-07-09 21:26:41

@Jzz3778__MC 复杂度是错的,建议看一下下面的提示。


by Jzz3778__MC @ 2024-07-09 21:27:53

@Mugino_Shizuri ?


by Mugino_Shizuri @ 2024-07-09 21:31:19

@Jzz3778__MC

AC Code

#include<iostream>
using namespace std;
inline int hui(int x)
{
    int a[9],rt=0;
    while(x!=0)
    {
        rt++;
        a[rt]=x%10;
        x/=10;
    }
    int lt=1;
    while(lt<=rt)
    {
        if(a[lt]!=a[rt])
        {
            return 0;
        }
        lt++,rt--;
    }
    return 1;
}
inline int bb(int x)
{
    for(int i=2; i * i<=x; i++)
    {
        if(x%i==0)
        {
            return 0;
        }
    }
    return 1;
}
int main(){
    int n,a;
    cin>>a>>n;
    for(int i=a;i<=n;i++)
        if(hui(i))
            if(bb(i))
                printf("%d\n",i);
return 0;
}

by Mugino_Shizuri @ 2024-07-09 21:31:43

常数小。


by Mugino_Shizuri @ 2024-07-09 21:35:39

不稳过


by Mugino_Shizuri @ 2024-07-09 21:40:15

现在可以了

#include<iostream>
using namespace std;
inline int hui(int x)
{
    int a[9],rt=0;
    while(x!=0)
    {
        rt++;
        a[rt]=x%10;
        x/=10;
    }
    int lt=1;
    while(lt<=rt)
    {
        if(a[lt]!=a[rt])
        {
            return 0;
        }
        lt++,rt--;
    }
    return 1;
}
inline int bb(int x)
{
    for(int i=2; i * i<=x; i++)
    {
        if(x%i==0)
        {
            return 0;
        }
    }
    return 1;
}
int main(){
    int n,a;
    cin>>a>>n;
    if(!(a&1)) ++a;
    for(int i=a;i<=n;i+=2)
        if(hui(i)&&((i%11)||(i==11)))
            if(bb(i))
                printf("%d\n",i);
return 0;
}

by LeoChen1229A @ 2024-07-10 16:07:59

#include<bits/stdc++.h>
#define int long long
using namespace std;
int hui(int x)
{
    int a[9],rt=0;
    while(x!=0)
    {
        rt++;
        a[rt]=x%10;
        x/=10;
    }
    int lt=1;
    while(lt<=rt)
    {
        if(a[lt]!=a[rt])
        {
            return 0;
        }
        lt++,rt--;
    }
    return 1;
}
int bb(int x)
{
    for(int i=2; i * i<=x; i++)
    {
        if(x%i==0)
        {
            return 0;
        }
    }
    return 1;
}
signed main()
{
    cin.tie(0);
    cout.tie(0);
    int l,r;
    cin>>l>>r;
    if(l%2==0)
    {
        l++;
    }
    for(int i=l; i<=r; i+=2)
    {
        if(hui(i)==1)
        {
            if(bb(i)==1)
            {
                cout<<i<<"\n";
            }
        }
    }
    return 0;
}

我的AC代码


by LeoChen1229A @ 2024-07-10 16:10:38

@Mugino_Shizuri 开#define int long long也行


by Derek123wzy @ 2024-07-14 11:39:22

@Jzz3778__MC

bb函数里先加个

if(x<2)return false;

特判一下

有些题目用得上


|