#include<iostream>
using namespace std;
int main() {
	int a, b;
	cin >> a >> b;
	if (a == 5)cout << 5 << endl;
	for (int i = a; i <= b;i++) {
		if (i % 2 != 0 && i % 3 != 0 && i % 5 != 0) {
			int n = i;
			int sum = 0;
			while (n) {
				sum = sum * 10 + n % 10;
				n /= 10;
			}
			if (sum == i) {
				int flag = 1;
				for (int j = 2; j * j <= i; j++) {
					if (i % j == 0) {
						flag = 0;
						break;
					}
				}
				if (flag) {
					cout << i << endl;
				}
			}
		}
	}
	return 0;
}

此题可以分为两个步骤,一、判断质数,二、判断回文数。显然,先判断回文数会快很多。

作者实测先一后二AC6个,先二后一AC9个。想要最后一个AC的话要用到一种筛选质数的算法,欧拉筛(线性筛)和埃氏筛都可以。其实作者两个都知道,但是都不会写。于是写了一个简略版的欧拉筛(就是for中的第一个if语句)。大意是在判断回文数时先把一些明显不符合题意的数字直接跳过,作者跳过了2、3、5的倍数。整个代码的思路是:1、初步筛选出符合条件的数;2、判断回文数;3、判断质数。

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐