先找出所有的回文数,然后再判断是否为素数。直接判断的话最后一个测数会TEL
通过查找百度百科了解回文素数的知识,两位回文素数1个,三位回文素数15个,五位回文素数93个,七位回文素数668个,九位回文素数5172个。从而可以删除大量的无用数据,我的代码只删除了8位的数据就AC了,没有用打表的方法删除更多的无用数据。
AC代码
#include<bits/stdc++.h>
using namespace std;
int temp[10000000],num;
void check(int a) {
if(a%6!=1&&a%6!=5) {
return ;
}
for(int i=5; i<=sqrt(a); i+=6) {
if(a%i==0||a%(i+2)==0) {
return ;
}
}
printf("%d\n",a);
}
void Palindrome(int x) {
int n=x,newed=0;
do {
newed=newed*10+x%10;
x/=10;
} while(x>0);
if(n==newed) {
check(n);
}
}
int main() {
int a,b;
scanf("%d%d",&a,&b);
if(b>10000000)
{
b=10000000;
}
for(int i=a; i<=b; i++) {
Palindrome(i);
}
return 0;
}
来源:CSDN
作者:初学小菜
链接:https://blog.csdn.net/weixin_44417475/article/details/104009253