shunxinruyi @ 2024-11-03 08:19:44
#include<bits/stdc++.h>
using namespace std;
bool ttt(int i)
{
if(i<=2) return 0;
else
{
int s=2;
while(s*s<=i)
{
if(i%s==0) return 0;
s++;
}
}
return 1;
}
int main()
{
int a,b,mid,len,next,ans;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
int t=0,s=i;
if(i<=9&&ttt(i))
cout<<i<<"\n";
else if(i%10!=0)
{
while(s/=10)
{
t++;
}
s=i;
ans=1;
while(t>=ans)
{
len=pow(10,ans);
next=pow(10,t);
if(s%len!=s/next)
{
break;
}
t--;
ans++;
}
if(t>=ans)
continue;
else if(ttt(i)) cout<<i<<"\n";
}
}
}
by whr24syy119 @ 2024-11-03 20:38:52
主要有这几点问题:1,太复杂,思路不清晰。2,建议你写一个判回文数的函数。3,时间太高。
by whr24syy119 @ 2024-11-03 20:47:50
AC代码:
#include<bits/stdc++.h>
using namespace std;
bool ttt(int i)//判素数
{
if(i<2) return 0;
else
{
int s=2;
while(s*s<=i)
{
if(i%s==0) return 0;
s++;
}
}
return 1;
}
bool huiwen(int n)//判回文数(性质:回文数倒过来与原数相同。如:12321)
{
int x=0;
int k=n;
while(n!=0){
x=x*10+n%10;
n/=10;
}
if(x==k){
return 1;
}else{
return 0;
}
}
int main()
{
int a,b;
cin>>a>>b;
if(a%2==0){//5以上的回文素数都是奇数。(看范围)
a=a-1;
}
for(int i=a;i<=b;i+=2)//只判奇数。时间减半。
{
if(huiwen(i)){//先判回文。
if(ttt(i)){//再判素数。
cout<<i<<endl;
}
}
}
return 0;//return 0不要忘了。
}
by whr24syy119 @ 2024-11-03 20:48:58
@shunxinruyi