回文质数
生成 [a,b] 内所有回文质数
正文
// 原题:https://oj.yecheng.tv/p/1440
// 题意:输出 [a,b] 内所有“既是质数又是回文数”的数,一行一个。
// 思路:按位数生成回文数(前半段镜像),再判质数并落在 [a,b];收集后排序输出。
// 复杂度:约 O(回文数个数 * sqrt) 可过 1e8。
// 易错点:先生成回文再判质比逐个判快得多;偶数位回文整体镜像,奇数位镜像时去掉中心位。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool isprime(int x){
if(x < 2) return false;
for(int i = 2; i * i <= x; i++) if(x % i == 0) return false;
return true;
}
long long ipow(int b, int e){
long long r = 1;
while(e--) r *= b;
return r;
}
int main(){
int a, b;
cin >> a >> b;
vector<int> res;
for(int len = 1; len <= 8; len++){
int h = (len + 1) / 2;
long long start = ipow(10, h - 1), end = ipow(10, h) - 1;
for(long long half = start; half <= end; half++){
string s = to_string(half);
string t = s;
if(len % 2 == 0) reverse(t.begin(), t.end());
else { t.pop_back(); reverse(t.begin(), t.end()); }
int v = stoi(s + t);
if(v >= a && v <= b && isprime(v)) res.push_back(v);
}
}
sort(res.begin(), res.end());
for(int x : res) cout << x << endl;
return 0;
}
洛谷·深入浅出的其它内容
- 简单的分苹果
- 简单的分苹果 2
- 圆的计算
- 简单的猴子吃桃
- 评测机队列
- 面积计算
- 竞赛得分
- 简单的分苹果 3
- 鸡兔共笼
- 定期存款
- 跑步
- 英文字母
- 玩橡皮泥
- 销量预测
- 苹果采购
- 字母转换
- 数字反转
- 再分肥宅水
- 小鱼的游泳时间
- 成绩
- 上学迟到
- 三角形面积
- 小玉买文具
- 苹果和虫子
- 对角线
- 数字比较
- 数的性质
- 闰年判断
- Apples
- 洛谷团队系统
- 肥胖问题
- 三位数排序
- 月份天数
- 不高兴的津津
- 买铅笔
- 三角形分类
- 小玉家的电费
- 小鱼的航程(改进版)
- 三角函数
- 陶陶摘苹果
- [COCI2006-2007#2] ABC
- 找最小值
- 分类平均
- 一尺之棰
- 数字直角三角形
- 阶乘之和
- 计数问题
- 级数求和
- 金币
- 数列求和
- 质数口袋
- 回文质数 Prime Palindromes
- 小玉在游泳
- 数字反转
- 月落乌啼算钱(斐波那契数列)
- 求极差 / 最大跨度值
- 最长连号
- 质因数分解
- 求三角形
- 打分