回文素数

#include <stdio.h>
int isPrime(int a)
{
int i;
if(a<=1) return 0;
for(i=2;i*i<=a;i++)
{
if(a%i==0)
return 0;
}
return 1;
}
int main()
{

int n,m,t,j;
while(scanf("%d%d",&n,&m)!=EOF)
{t=0;
if(n==0&&m==0) break;
for(j=n;j<=m;j++)
{
if(isPrime(j))
{
if(j<=10) t++;
if(j>10&&j<100)
{
if(j%10==j/10) t++;
}
if(j>=100&&j<1000)
{if(j%10==j/100) t++;}
if(j>=1000&&j<10000)
{if(j%100==j/100) t++;}
if(j>=10000&&j<100000)
{
if(j%100==j/1000) t++;
}
if(j>=100000&&j<=1000000)
{
if(j%1000==j/1000) t++;
}
}
}
printf("%d ",t);
}
return 0;
}

 代码超时


#include <stdio.h>
int isPrime(int a)
{
int i;
if(a<=1) return 0;
for(i=2;i*i<=a;i++)
{
if(a%i==0)
return 0;
}
return 1;
}
int main()
{

int n,m,t,j,a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{t=0;
if(n==0&&m==0) break;
for(j=n;j<=m;j++)
{
if(isPrime(j))
{
b=0;
a=j;
while(a)
{
b=b*10+a%10;         将数把顺序调换
a=a/10;
}
if(b==j) t++;
}
}
printf("%d ",t);
}
return 0;
}

时间还是超限,试一下先判断回文,在判断素数

#include <stdio.h>
int c(int i)
{
int j,k,sum=0;
k=i;
while(k)
{
sum=sum*10+k%10;
k=k/10;
}
if(sum==i) return 1;
return 0;
}
int main()
{
int i,n,m,t,j,l;
while(scanf("%d %d",&n,&m)!=EOF)
{t=0;
if(n==0&&m==0) break;
for(i=n;i<=m;i++)
{
if(c(i))
{l=0;
if(i<=1) continue;
for(j=2;j*j<=i;j++)
{
if(i%j==0) l++;
}
if(l==0) t++;
}
}
printf("%d ",t);
}
return 0;
}答案正确

原文地址:https://www.cnblogs.com/liuming1115/p/4426078.html