_cheems_ckr_ @ 2024-10-03 22:35:47
后面3个点全TLE了
#include <bits/stdc++.h>
using namespace std;
bool f(int n){
if(n<2) return 0;
for(int i=2;i*i<=n;i++)
if(n%i==0) return 0;
return 1;
}
bool nxd(int n){
int t=0,n1=n;
while(n1){
t=t*10+n1%10;
n1/=10;
}
return t==n;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=n;i<=m;i++){
if(f(i)&&nxd(i)){
cout<<i<<"\n";
}
}
return 0;
}
by _cheems_ckr_ @ 2024-10-03 22:38:47
回帖必关
by Axolotlwww @ 2024-10-06 00:27:40
你这个单个数判断都 O(n) 了(1e8的范围啊
bool f(int n){
if(n<2) return 0;
for(int i=2;i*i<=n;i++)
if(n%i==0) return 0;
return 1;
}
f() 函数可以继续用应该没问题,然后质数判断这里貌似只能上线性筛了,筛完遍历区间内素数然后f()判断是否回文,或者反过来先筛回文(其实一样,因为线性筛必须从2开始筛起)
我AC代码可以参考一下 (别抄
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e8+10;
bool isp[maxn];
int a,b,cnt=0;
int p[maxn];
void getP(){
memset(isp,1,sizeof(isp));
isp[0]=isp[1]=0;
for(int i=0;i<=b;i++){
if(isp[i]) p[++cnt-1]=i;
for(int j=0;j<cnt&&i*p[j]<=b;j++){
isp[i*p[j]]=0;
if(i%p[j]==0) break;
}
}
}
bool isPal(string s){
int slen=s.length();
if(slen==1) return true;
for(int i=1;i<=slen/2;i++){
if(s[i-1]!=s[slen-i]){
return false;
}
}
return true;
}
void getPal(){
for(int i=a;i<=b;i++){
if(!isp[i]) continue;
string s=to_string(i);
if(isPal(s)){
cout<<i<<endl;
}
}
}
int main(){
cin>>a>>b;
getP();
getPal();
return 0;
}