tle一个求助

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

lizhuorong @ 2023-11-18 12:10:51

请看代码:

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

by FreedomKing @ 2023-11-18 12:26:55

@lizhuorong 你很急吗


by lizhuorong @ 2023-11-18 12:55:49

@FreedomKing

?


by FreedomKing @ 2023-11-18 12:57:43

@lizhuorong 6分钟3个求助帖真有你的。


by lizhuorong @ 2023-11-18 12:58:55

@FreedomKing

考试题目全不会


by heyihang6666 @ 2023-11-18 13:12:21

0分的我给条建议:骗分(没准能骗个几十分)


by czh1 @ 2023-11-19 18:40:20

@lizhuorong 你需要多写一些判断条件,在运行两个函数之前就可以先快速排除这个数
eg:if(i%2)//直接砍一半
另外,我发现一个事情,位数为偶数时,一定没有回文质数 (没看题解,自己发现的)
以下为我的代码(是C的)

#include<stdio.h>
int f(int x){
    for(int i=2;i*i<=x;i++){
        if(x%i==0){
            return 0;
        }
    }
    return 1;
}
int g(int x){
    int a[10],i=0;
    while(x!=0){
        a[i]=x%10;
        x/=10;
        i++;
    }
    i--;
    for(int j=0;j<=i/2;j++){
        if(a[j]!=a[i-j]){
            return 0;
        }
    }
    return 1;
}
int main(){
    int a,b,c[10];
    scanf("%d %d",&a,&b);
    for(int i=a;i<=b;i++){
        if(i%2&&(i<12||(i>100&&i<1000)||(i>10000&&i<100000)||(i>1000000&&i<10000000))){//直接在if里判断位数,不在回文函数里判断位数,更快
            if(g(i)&&f(i)){
                printf("%d\n",i);
            }
        }
    }
    return 0;
}

第一次帮别人,希望对你有帮助(全AC了)(这个应该不会被举报吧。。。)


by lizhuorong @ 2023-11-25 08:01:47

@czh1 谢谢了


|