yyc1117 @ 2024-05-06 21:08:51
直接先判断回文在判断质数,怎么调啊?
#include<bits/stdc++.h>
using namespace std;
int a,b,c[11];
int main(){
cin>>a>>b;
for(int i=a;i<=b;i++){
int s=i,k=0;
bool flag=true;
while(s){
c[++k]=s%10;
s/=10;
}
for(int j=1,l=k;l-j>=1;j++,l--){
if(c[j]!=c[l]){
flag=false;
break;
}
}
if(flag){
for(int j=2;j*j<=i;j++){
if(i%j==0){
flag=false;
break;
}
}
}
if(flag)cout<<i<<endl;
memset(c,0,sizeof(c));
}
return 0;
}
救救蒟蒻吧o(╥﹏╥)o
by return_TLE @ 2024-05-06 21:13:18
@yyc1117 嗯这个东西应该用正常的办法就会tle掉一个点的,如果一定要ac的话可以把所有的回文质数写到一个数组里面然后直接查数组
by czxuyang @ 2024-05-06 21:13:57
上面给了提示,我就给个答案吧
#include<bits/stdc++.h>
using namespace std;
bool ispdrome(int x){
int s=0,k=x;
while(k!=0){
s*=10;
s+=k%10;
k/=10;
}
if(s==x) return true;
return false;
}
bool isprime(int x){
for(int i=3;i<=sqrt(x);i=i+2){
if(x%i==0) return false;
}
return true;
}
int main(){
int a,b;
cin>>a>>b;
if(a%2==0)a++;
if(b>=10000000) b=10000000;
for(int i=a;i<=b;i=i+2){
if(ispdrome(i) && isprime(i)){
cout<<i<<endl;
}
}
return 0;
}
by yyc1117 @ 2024-05-09 21:13:04
@return_TLE 谢谢
by yyc1117 @ 2024-05-09 21:13:36
@czxuyang 谢谢