P1217 [USACO1.5]回文质数 Prime Palindromes

点点圈 提交于 2020-01-16 19:42:30

题目链接

先找出所有的回文数,然后再判断是否为素数。直接判断的话最后一个测数会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;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!