最后三点TLE,求大佬教教如何优化?

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

scx2129 @ 2023-09-29 14:27:12


#include<bits/stdc++.h>
using namespace std;

bool zhishu(int n)
{
    if (n < 2) return 0;
    for (int i = 2; i * i <= n; ++i)
    {
        if (n % i == 0) return 0;
    }
    return 1;
}
bool fanzhuan(int n)
{
    int a = 0;
    int b = n;
    while (n != 0)
    {
        a = a * 10 + n % 10;
        n /= 10;
    }
    if (b != a) return 0;
    return 1;
}
int main()
{
    int a, b,flag=0;
    cin >> a >> b;
    for (int i = a; i < b; i++)
    {
        if (zhishu(i) && fanzhuan(i))
        {
            cout << i << endl;
        }
    }
    return 0;
}

by Kniqht @ 2023-09-29 14:31:12

暴力不了罢,看看题解突然发现我不会橙题自闭了


by thinkerliu @ 2023-09-29 14:38:55

打表。。。


by scx2129 @ 2023-09-29 15:16:27

@Kniqht 题解看不太懂,人麻麻了


by scx2129 @ 2023-09-29 15:16:58

@thinkerliu 没懂什么意思,求解


by thinkerliu @ 2023-09-29 15:42:47

用高复杂度的代码(如你的)提前把所有可能的答案算出来存好,要时直接取(不过我发现好像多的存不下。。。)


by abyss_Gavin @ 2023-10-04 10:02:57

可以用数组来表示数去找互文数,去除两端是偶数的和位数是偶数的数


by hmy_ddxw__awa @ 2023-10-04 22:23:33

我去我跟你代码一样

#include<bits/stdc++.h>
using namespace std;
bool pdzs(int n){
    if(n==2) return true;
    if(n%2==0||n<2) return false;
    else{
        for(int i=3;i*i<=n;i+=2){
            if(n%i==0) return false;
        }
        return true;
    }
}
bool pdhws(int n){
    int x=0;
    int s=n;
    while(s>0){
        x=x*10+s%10; 
        s=s/10;
    }
    if(x==n) return true;
    else return false;
}
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    for(int i=a;i<=b;i++){
        if(pdzs(i)&&pdhws(i)){
            printf("%d\n",i);
        }
    }
    return 0;
}

|