Spirit_ZeroHeart @ 2023-10-29 16:26:00
求助,这个程序还能怎么改进,就差最后一个测试点了
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,z=0,dz=0,j=2;
scanf("%d %d",&a,&b);
for(int i=a;i<=b;i++)
{
if(i%2!=0) //偶数一定不是质数
{
z=i;
dz=0;
while(z!=0)
{
dz=dz*10+z%10;
z/=10;
}
if(dz==i) //判断是否是回文数
{
for(j=2;j<=sqrt(i);j++)
{
if(i%j==0)
break;
}
if(j>sqrt(i)) //判断是否是质数
printf("%d\n",i);
}
}
}
return 0;
}
by 1612855242ytq @ 2023-10-29 16:46:12
两层循环可以直接把偶数删掉,
i=a%2?a:a+1,i<=b,i+=2
j=3,j*j<=i,j+=2
by 1612855242ytq @ 2023-10-29 16:48:27
如果还是不行可以换个思路,直接构造回文数
by Spirit_ZeroHeart @ 2023-10-30 08:01:45
@1612855242ytq 还是不行哈哈,我去试试构造回文数,谢谢大佬了
by 1612855242ytq @ 2023-10-31 19:46:36
@Spirit_ZeroHeart 构造回文数会快很多,反正最多八位数,写个循环就行了