[USACO1.5] 回文质数 Prime Palindromes

题目传送门

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

题目描述

因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 151 是回文质数。

写一个程序来找出范围 [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 , 000 ) [a,b] (5 \le a < b \le 100,000,000) [a,b](5a<b100,000,000)(一亿)间的所有回文质数。

输入格式

第一行输入两个正整数 a a a b b b

输出格式

输出一个回文质数的列表,一行一个。

样例输入 #1

5 500

样例输出 #1

5
7
11
101
131
151
181
191
313
353
373
383

提示

提示 1: 找出所有的回文数再判断它们是不是质数(素数).

提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。

产生长度为 5 5 5 的回文数:

for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数for (d2 = 0; d2 <= 9; d2++) {for (d3 = 0; d3 <= 9; d3++) {palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...)}}}

重要:11的整倍数有一个性质,那就是奇数位上数字之和=偶数位上数字之和。而4、6、8等偶数长度的回文数都满足此性质,都是11的倍数,因此除11之外,任意偶数长度的回文数都不可能为质数

为了减少计算,可以加一些判断条件,例如 (a<=1000 && b>=100) 才有可能存在三位的回文素数,如果给定的数据范围不匹配,可以跳过生成三位的回文数。其他类同。

#include<bits/stdc++.h>
using namespace std;
bool isPrime(int num) {if(num < 2) return false;for(int i=2; i*i<=num; i++) {if(num%i==0) return false;}return true;
}
int main() {int a, b;cin>>a>>b;//处理100以内的回文素数:5,7,11if(a<=5 && b>=5) cout<<5<<endl;if(a<=7 && b>=7) cout<<7<<endl;if(a<=11 && b>=11) cout<<11<<endl;/*11的整倍数有一个性质,那就是奇数位上数字之和=偶数位上数字之和。而4、6、8等偶数长度的回文数都满足此性质,都是11的倍数,因此除11之外,任意偶数长度的回文数都不可能为质数*///处理长度为3if(a<=1000 && b>=100) {for (int d1 = 1; d1 <= 9; d1+=2) { //只有奇数才可能是素数for (int d2 = 0; d2 <= 9; d2++) {int num = 100*d1 + 10*d2 + d1; //组合回文数if(num>=a && num<=b && isPrime(num)) cout<<num<<endl;}}}//处理长度为5if(a<=100000 && b>=10000) {for (int d1 = 1; d1 <= 9; d1+=2) { //只有奇数才可能是素数for (int d2 = 0; d2 <= 9; d2++) {for (int d3 = 0; d3 <= 9; d3++) {int num = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1; //组合回文数if(num>=a && num<=b && isPrime(num)) cout<<num<<endl;}}}}//处理长度为7if(a<=10000000 && b>=1000000) {for (int d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数for (int d2 = 0; d2 <= 9; d2++) {for (int d3 = 0; d3 <= 9; d3++) {for (int d4 = 0; d4 <= 9; d4++) {int num = 1000000*d1 + 100000*d2 +10000*d3 + 1000*d4 + 100*d3 + 10*d2 + d1; //组合回文数if(num>=a && num<=b && isPrime(num)) cout<<num<<endl;}}}}}return 0;
}
补充个一般思路的代码,两个函数用于判断回文和质数,需要注意的是,一定要先进行回文判断,再进行质数判断,因为数量上来看,回文的数量要远小于质数,反过来会超时。另外,右边界需要做一个限定,虽然可能的右边界可以达到一亿,但最大的回文素数只能是7位,右边界限定到9999999,实际上最大的回文质数是9989899,也可以直接以这个数做边界。
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int num){if(num < 2) return false;for(int i=2; i*i<=num; i++){if(num%i==0) return false;}return true;
}
bool isPalindrome(int num){int sum=0, k=num;while(k){sum = sum*10+k%10;k/=10;}return sum==num;
}
int main(){int a, b;cin>>a>>b;for(int i=a; i<=min(b, 9989899); i++){if(isPalindrome(i) && isPrime(i)) cout<<i<<endl;}return 0;
}
再补充个埃氏筛素数预打表的方法,先用埃氏筛素数的方法把所有素数标识出来,同样也需要限制一下边界,筛到一亿会超时。埃氏筛素数打好表之后,就可以先判断素数,再判断回文。
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+1;
bool flag[N];
//埃氏筛素数 
void func(){memset(flag, true, sizeof(flag));flag[0]=flag[1]=false;for(int i=2; i*i<=N; i++){if(flag[i]){for(int j=i*i; j<=N; j=j+i){flag[j]=false;}}} 
}
bool isPalindrome(int num){int sum=0, k=num;while(k){sum = sum*10+k%10;k/=10;}return sum==num;
}
int main(){func(); int a, b;cin>>a>>b;for(int i=a; i<=min(b, 9989899); i++){if(flag[i] && isPalindrome(i)) cout<<i<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初窥 HTTP 缓存

引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…

Django 视图层

from django.shortcuts import render, HttpResponse, redirectfrom django.http import JsonResponse1. render: 渲染模板 def index(request):print(reverse(index))return render(request, "index.html")return render(request, index.html, context{name: lisi})…

简单介绍下 VitePress 中的 vp-doc 和 vp-raw

VitePress 是一个轻量级的静态网站生成器&#xff0c;专为快速构建文档网站而设计。它是基于 Vite 和 Vue 3 构建的&#xff0c;旨在提供快速的开发体验和高效的构建过程。 存在两个需要注意的点&#xff1a;vp-doc 和 vp-raw&#xff0c;它们代表了不同的 CSS 样式类和用途&a…

【数据结构】LinkedList与链表

LinkedList与链表 1. ArrayList的缺陷2. 链表2.1 链表的概念及结构2.2 链表的实现 3.链表面试题 【本节目标】 ArrayList的缺陷链表链表相关ojLinkedList的模拟实现LinkedList的使用ArrayList和LinkedList的区别 1. ArrayList的缺陷 上节课已经熟悉了ArrayList的使用&#xf…

Matrix Multiplication

lab要求如下&#xff1a;

Laravel8.5+微信小程序实现京东商城秒杀方案

一、商品秒杀涉及的知识点 鉴权策略封装掊口访问频次限制小程序设计页面防抖接口调用订单创建事务使用超卖防御 二、订单库存系统方案&#xff08;3种&#xff09; 下单减库存 优点是库存和订单的强一致性&#xff0c;商品不会卖超&#xff0c;但是可能导致恶意下单&#xff…

esp8266 编译、烧录环境搭建

一、准备 xtensa-lx106-elf-gcc8-4-0-esp-2020r3-win32下载&#xff1a;点击跳转 MSYS2 压缩包文件&#xff1a; 固件烧录工具&#xff1a;点击跳转 esp8266源码地址&#xff1a;点击跳转 二、搭建编译环境 1、在D盘创建一个ESP8266目录&#xff0c;解压MSYS2.zip到里面&a…

WEB攻防-通用漏洞CSRFSSRF协议玩法内网探针漏洞利用

CSRF构造工具&#xff0c;也可以用bp构造 选中要保存的请求&#xff0c;点击Generate HTML,生成带有添加用户请求的html文件&#xff0c;然后将构造的html放在网站上&#xff0c;生成访问地址&#xff0c;诱导管理员点击链接&#xff0c;就会添加用户 start Recording之后就会…

2-7 C函数指针与回调函数

前言&#xff1a; 对函数指针与回调函数知识回顾&#xff0c;仅供学习参考... 目录 前言&#xff1a; 1.0 函数指针 2.0 函数指针变量 3.0 函数指针与指针函数 4.0 函数指针类型 5.0 卡点 后记&#xff1a; 1.0 函数指针 函数指针&#xff0c;简单来说就是指向函数的指针…

代码设计:设计模式:应对变化

文章目录 概述1.拆分代码2.解耦3.扩展总结概述 代码的设计模式主要为了应对变化 三种代码设计中应对变化的方式 1.拆分代码 2.解耦 3.扩展 1.拆分代码 减小变化对代码的影响 需要拆分代码的几种情况 1.类或方法的代码量巨大,导致代码可读性降低 2.存在复杂的代码,如…

分布式FastDFS存储的同步方式

目录 一&#xff1a;FatsDFS的结构图 二&#xff1a;FatsDFS文件同步 前言&#xff1a; 1&#xff1a;同步日志所在目录 2&#xff1a;binlog格式 3&#xff1a;同步规则 4&#xff1a;binlog同步过程 1 &#xff1a;获取组内的其他Storage信息 tracker_report_thread_e…

【大模型】ChatGPT 提示词优化进阶操作实战详解

目录 一、前言 二、ChatGPT 提示词几个基本的优化原则 2.1 明确的提示词 2.1.1 提示词具体而清晰 2.1.1.1操作案例演示 2.2 确定焦点 2.2.1 操作案例演示 2.3 保持提示词的相关性 2.3.1 什么是相关性 2.3.2 提示词相关性操作案例一 2.3.2 提示词相关性操作案例二 三…

龙芯要构建独立于x86和ARM的第三套新型信息技术体系和产业生态

2024泰山科技论坛”在泉城济南召开&#xff0c;近600位院士、专家和产业精英共同探讨了智能机器人、先进制造、工业模型等技术如何助力产业高质量发展。 大会上&#xff0c;龙芯中科董事长胡伟武发表了《破解卡脖子问题&#xff0c;构建新发展格局》主旨演讲。 胡伟武表示&…

软件工程中的需求分析流程详解

一、需求分析的定义 需求分析&#xff08;Requirements Analysis&#xff09;是指在软件开发过程中&#xff0c;通过与用户、相关人员的沟通与讨论&#xff0c;全面理解和确定软件需求的过程。需求分析的最终目标是清晰、准确地定义软件系统应具备的功能、性能、用户界面、约束…

C 语言学习的经典书籍有哪些?

学习C语言的理由 C语言是一种程席设计语言&#xff0c;它是由美国AT&T公司贝尔实验室的Dennis Ritchie于1972年发明的。C语言之所以流行&#xff0c;是因为它简单易用。学习C语言的几个理由如下&#xff1a; (1)C、C#和Java使用一种被称为面向对象程序设计(0bject-Orient…

在鲲鹏麒麟服务器上部署MySQL主从集群

因项目需求需要部署主从MySQL集群&#xff0c;继续采用上次的部署的MySQL镜像arm64v8/mysql:latest&#xff0c;版本信息为v8.1.0。计划部署服务器192.168.31.100和192.168.31.101 部署MySQL主节点 在192.168.31.100上先创建好/data/docker/mysql/data和/data/docker/mysql/l…

Kamailio SIP服务器的配置与运行

一、Kamailio 简介 Kamailio&#xff08;原名OpenSER&#xff09;是一款基于SIP&#xff08;Session Initiation Protocol&#xff09;协议的开源服务器&#xff0c;适用于构建VoIP&#xff08;Voice over Internet Protocol&#xff09;、视频会议、即时消息和 presence服务等…

Transformers在计算机视觉领域中的应用【第2篇:MAE——BERT的CV版本】

目录 1 介绍2 模型示意图3 MAE算法4 总结 论文&#xff1a;Masked Autoencoders Are Scalable Vision Learners 代码&#xff1a;https://github.com/facebookresearch/mae 1 介绍 MAE是基于ViT的&#xff0c;将整个训练拓展到没有标号的数据上面&#xff0c;和BERT一样&#…

WebGL vendor [显卡]指纹

一、WebGL vendor&#xff1a;(厂商) Google Inc. (NVIDIA) c定义在 third_party\angle\src\libANGLE\Display.cpp 格式化Google Inc.字符在Display::initVendorString()函数里面&#xff0c;可以在此修改值。 void Display::initVendorString() {mVendorString …

PCL点云处理之判断点在多边形内外--方法1 (二百四十二)

PCL点云处理之判断点在多边形内外--方法1 (二百四十二) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 这里实现一种判断点与多边形位置关系的算法,具体使用前可能需要验证!!!,这里只做了有限的测试用于参考,代码实现不依赖其他库,使用接口直接看给出示例即可,注意…