博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018 ICPC 沈阳网络赛预赛 Supreme Number(找规律)
阅读量:6095 次
发布时间:2019-06-20

本文共 1209 字,大约阅读时间需要 4 分钟。

【传送门】

 

【题目大意】:给定一个数字(最大可达10100),现在要求不超过它的最大超级质数。超级质数定义:对于一个数,把它看成数字序列 ,如果它的所有子序列形成的数都是质数,那么它就是超级质数。

比如说3137,它的子序列有3,1,7,31,33,37,313,317,137.....由于有一个子序列是33它不是质数,所有3137不是超级质数。

 

【题解】注意,子序列和子串是不同的,子序列包含子串。子序列只要求相对顺序不变,而子串不仅仅要求顺序不变而且要求连续。比赛的时候因为这个WA了好几次。

(1)首先我们很容易知道,某个数它是超级质数,那么它所有位必须都是质数,也就是说,每一位上的数字只可能是1,2,3,5,7

(2)除了最高位可以是1,2,3,5,7,其余低位只能是1,3,7。因为2,5作低位必然有子序列不是质数。

(3)除了1后面还可以接1之外,其余数字后面都不能再接这个数字。比如3后面不能再接3,否则33不是质数。

(4)找出位数K = 1,2,3的所有满足条件的数,发现K = 4时,找不到4位数的超级质数。由于子序列不能是超级质数,那么4位以上的数不可能是超级质数。

 

【AC代码】

#include 
#include
#include
#include
#include
#include
#include
using namespace std;int a1[5] ={ 1,2,3,5,7};int a2[9] = { 11,13,17,23,31,37,53,71,73};int a3[6] = { 113,131,137,173,311,317};int main(){ ios::sync_with_stdio(false); int t; cin>>t; string s; int k=1; while(t--) { cin>>s; cout<<"Case #"<
<<": "; int len = s.size(); if(len == 1){ int num = atoi(s.c_str()); for(int i=4; i>=0; i--){ if(a1[i] <= num){ cout<
<
=0; i--){ if(a2[i] <= num){ flag = 1; cout<
<
=0; i--){ if(a3[i] <= num){ flag = 1; cout<
<
= 4){ cout<<"317"<

 

转载于:https://www.cnblogs.com/czsharecode/p/9612674.html

你可能感兴趣的文章
JavaScript的闭包
查看>>
Jquery、Ajax、Struts2完成定时刷新
查看>>
PHP字符串的替换(preg_replace)
查看>>
【算法学习笔记】61.回溯法 DFS SJTU OJ 1106 sudoku
查看>>
【算法学习笔记】86.栈 中缀表达式 SJTU OJ 1033 表达式计算
查看>>
项目总结31:Java字符串过滤特殊字符和表情符号
查看>>
标准Web系统的架构分层
查看>>
Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
查看>>
「小程序JAVA实战」小程序模板在外部页面引用(20)
查看>>
创建django项目
查看>>
lca最小公共祖先祖先
查看>>
-------第一讲----第一节-------------- 1 基本概念-----------------什么是数据结构--------------...
查看>>
优先队列 + 并查集 + 字典树 + 欧拉回路 + 树状数组 + 线段树 + 线段树点更新 + KMP +AC自动机 + 扫描线...
查看>>
理解DOM
查看>>
jquery的height()和javascript的height总结,js获取屏幕高度
查看>>
浅谈Iframe和FRAME的区别
查看>>
洛谷P4931 情侣?给我烧了!(加强版)(组合数学)
查看>>
C#串口通讯概念以及简单实现
查看>>
使用xtrabackup做数据库的增量备份
查看>>
ip地址的唯一性是如何保证的
查看>>