gzx_0928 @ 2024-07-05 14:36:25
#include<bits/stdc++.h>
using namespace std;
int a,b;
int jjb(int x)//判断质数
{
for(int i=2;i*i<=x;i++)
{
//能不能除尽
if(x%i==0)
{
return 0;
}
}
return 1;
}
bool jjb2(int x)//判断回文数
{
int y=x,num=0;
while(y!=0)
{
num=num*10+y%10;
y=y/10;
}
//左右两边是否相等
if(num==x)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
cin>>a>>b;
for(int k=a;k<=b;k++)
{
if(jjb(k))
{
if(jjb2(k))
{
cout<<k<<endl;
}
}
}
return 0;
}
by Targanzqq @ 2024-07-05 14:49:33
你可以先考虑把质数用欧拉筛给筛出来,要不然1e8再乘上一个位数就肯定会T掉
by Ascnbeta @ 2024-07-05 14:49:34
@gzx_0928 不必每一个数都进行判断回文数和质数,首先遇到
by Targanzqq @ 2024-07-05 14:50:31
???你这复杂度可不是超了一点啊,对1e8跑
by Ascnbeta @ 2024-07-05 14:53:08
@gzx_0928 所以把
for(int k=a;k<=b;k++)
{
if(jjb(k))
{
if(jjb2(k))
{
cout<<k<<endl;
}
}
}
改为
for(int k=a;k<=b;k++)
{
if (k % 2 == 0) continue;
if(k==1000||k==100000||k==10000000)
{
k*=10;
}
if(jjb2(k))
{
if(jjb(k))
{
cout<<k<<endl;
}
}
}
by Ascnbeta @ 2024-07-05 14:55:57
至于为什么偶数位的回文数一定不是质数,是因为它们符合被11整除的数的共同特征(具体去网上搜),因此偶数位的回文数一定不是质数
by gzx_0928 @ 2024-07-05 15:04:29
@AlwaysSunshine 谢谢!
by gzx_0928 @ 2024-07-05 15:06:43
@AlwaysSunshine 以A,外加关注