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


#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、判断质数。


更多推荐
所有评论(0)