TLE没跑了呵呵

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

FanZhiyu1 @ 2024-07-25 16:46:20

#include<bits/stdc++.h>
using namespace std;
string change(int n){
    string s;
    int i=0;
    while(n>0){
        s+=n%10+'0';
        n/=10;
        i++;
    }
    for(int i=0,j=s.size()-1;i<j;i++,j--){
        swap(s[i],s[j]);
    }
    return s;
}
bool isprime(int n){
    for(int i=2;i<=sqrt(n);i++)
        if(n%i==0) return 0;
    return 1;
}
bool ishw(string s){
    int len=s.length();
    for(int i=0,j=len-1;i<j;i++,j--)
        if(s[i]!=s[j]) return 0;
    return 1;
}
void work(int m,int n){
    for(int i=m;i<=n;i+=2){
        if(isprime(i)&&ishw(change(i))) cout<<i<<endl;
    }
}
int main()
{
    int m,n;
    cin>>m>>n;
    if(m%2==0) m++;
    work(m,n);
    return 0;
}

by ATION001 @ 2024-07-25 16:48:27

@FanZhiyu1 温馨提示:要用线性筛筛质数。

代码

#include<bits/stdc++.h>
#include<string>
#include<cstring>
using namespace std;
const int dioj=1e7+5;
bool isp[dioj];
int prime[dioj];
int cnt=0;
void ct(){
    memset(isp,true,sizeof(isp));
    for(int i=2;i<=dioj;i++){
        if(isp[i]==true){
            prime[++cnt]=i;
        }   
        for(int j=1;j<=cnt&&i*prime[j]<=dioj;j++){
            isp[i*prime[j]]=false;
            if(i%prime[j]==0){
                break;
            }
        }
    }
}
int main(){
    int n,n1;
    cin>>n>>n1;
    ct();
    for(int i=1;i<=cnt;i++){
        if(prime[i]<=n1&&prime[i]>=n){
            string d=to_string(prime[i]);
            string cd=d;
            reverse(cd.begin(),cd.end());
            if(cd==d){
                cout<<d<<endl;
            }
        } 
    }
    return 0;
}

by FanZhiyu1 @ 2024-07-26 06:47:06

@ATION001 谢谢大佬!


|