【Python 百练成钢】时间调整、二进制数、回文素数、字母距离


💛问题描述💛


求出大于或等于 N 的最小回文素数。

回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。

例如,2,3,5,7,11 以及 13 是素数。

回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。

例如,12321 是回文数。

示例 1:

输入:6

输出:7

示例 2:

输入:8

输出:11

示例 3:

输入:13

输出:101

提示:

1 <= N <= 10^8

答案肯定存在,且小于 2 * 10^8

💛问题分析💛


使用Python实现这个的话属实有点吃力,在这给大家扩展一下思维,题目问的是1-2亿之间的素数回文数

既要满足两个条件,在数值很大的时候回文数是比较稀少的,所以我们可以先进行筛选,将1-2亿内的素数回文数直接筛出来,本题中使用的是埃氏筛,也就是注释的部分。全找出来可能需要几秒,我们不担心,将所有符合条件的数据打进表之后,直接将表复制进你要提交的程序,然后遍历就好。1-2亿内才有2千多个符合条件的数据。

在这里插入图片描述

由于这个表比较长,在这里就不直接粘进代码了。

💛代码实现💛


from math import sqrt

打表(这些操作不要出现在所提交的程序内)

def F(n):

return str(n)==str(n)[::-1]

# 打表法

ansls=[]

templs=[]

ans=[True]int(21e8+1)

ans[0]=False

ans[1]=False

for i in range(2,int(sqrt(2*1e8))+1):

if ans[i]:

for j in range(ii,int(21e8)+1,i):

ans[j]=False

for i in range(int(2*1e8)):

if ans[i]==True:

templs.append(i)

for i in templs:

if F(i):

ansls.append(i)

print(len(ansls))

print(ansls)

将上面得到的结果ansls中的数据直接复制过来。

ansls=[…]

n=int(input())

for i in ansls:

if i>=n:

print(i)

break

💟字母距离💞

==========================================================================


💚问题描述💚


问题描述

两个字母之间的距离定义为它们在字母表中位置的距离。例如 A 和 C 的距离为 2,L 和 Q 的距离为 5。

对于一个字符串,我们称字符串中两两字符之间的距离之和为字符串的内部距离。

例如:ZOO 的内部距离为 22,其中 Z 和 O 的距离为 11。

请问,LANQIAO 的内部距离是多少?

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

我们可以改写一下输入任意长度字符,判断其内部距离,字符串长度小于10w

这是一个往届蓝桥杯真题的填空题,但是我们不妨将其改写成一下

参考结果

WATJKJDXRGZNXYTW 1132

LANQIAO 162

💚问题分析💚


每个字母之间的间隔使用的是ASCII表中的距离,比如A为65,Z为90,AZ之间的距离就是25,Z与A之间的距离也是25,如果数据比较多的话可以将其写进字典,然后计算,26种字母关于个数的笛卡尔积。应该有26*26种情况,在计算A-Z距离与Z-A距离时明显重复计算了所以在得到的结果应该除以2

💚代码实现💚


s=input()

dic={chr(k):0 for k in range(65,91)}

for i in s:

dic[i]+=1

ans=[0]*26

i=0

for k1 in dic:

for k2 in dic:

if dic[k1]!=0 and dic[k2]!=0 and k1!=k2:

ans[i]+=(dic[k2]*dic[k1]*abs(ord(k1)-ord(k2)))

i+=1

print(sum(ans)//2)

💟CTF💞

=========================================================================


💙问题描述💙


Description

在迷迷糊糊的进入大学以后,你决定参加竞赛出人头地,但是身处机算机学院的你,却发现竞赛并不等于电竞,你左选右选,发现了acm和ctf,一直想成为黑客的你,决定去ctf那里学习一下,但是当ctf要学的东西真是太多辣,pwn,web,逆向…,作为萌新的你决定多刷题。

学长给你指定了一个学习计划,考虑到计算机的本质是个二进制,所以你将在2^1

2

1天内每天刷一题,

22 天内每天刷两题,即第1,2天每天刷一题,第 3 到 6 天每天刷两题,2x

天每天刷xx题,以此类推,有算法基础的你决定写一个程序来看看自己在规定的天数内到底要写几道题

Input

一个整数 tt 表示天数(1 <=t <= 10^7)(1≤t≤10

7

)。

Output

一个整数xx表示要刷的题目数量。

Sample Input

1

9

Sample Output

1

19

💙问题分析💙


刚开始计算的时候循环内进行题目计数使用的是加法(也就是每一天写多少道题),提交的时候超时

后面优化后是按时间段进行计算,最后得到的结果减去超出的天数乘以每天的写题量。

💙代码实现💙


暴力

n=int(input())

day=0

ans=0

k=0

i=1

if n==1:

print(1)

elif n==2:

print(2)

else:

while day<n:

i*=2

k+=1

for x in range(0,i):

ans+=k

day+=1

if day==n:

break

print(ans)

优化一下

n=int(input())

day=0

作者徽是vip1024c
ans=0

k=0

i=1

if n==1:

print(1)

elif n==2:

print(2)

else:

while day<n:

i*=2

k+=1

ans+=k*i

day+=i

ans-=(day-n)*k

print(ans)

💟Huffuman树💞

===============================================================================


💜问题描述💜


问题描述

Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。

给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:

1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。这个过程的费用记为pa + pb。

2. 重复步骤1,直到{pi}中只剩下一个数。

在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。

本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

例如,对于数列{pi}={5, 3, 8, 2, 9},Huffman树的构造过程如下:

1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。

2. 找到{5, 8, 9, 5}中最小的两个数,分别是5和5,从{pi}中删除它们并将和10加入,得到{8, 9, 10},费用为10。

3. 找到{8, 9, 10}中最小的两个数,分别是8和9,从{pi}中删除它们并将和17加入,得到{10, 17},费用为17。

4. 找到{10, 17}中最小的两个数,分别是10和17,从{pi}中删除它们并将和27加入,得到{27},费用为27。

5. 现在,数列中只剩下一个数27,构造过程结束,总费用为5+10+17+27=59。

输入格式

输入的第一行包含一个正整数n(n<=100)。

接下来是n个正整数,表示p0, p1, …, pn-1,每个数不超过1000。

输出格式

输出用这些数构造Huffman树的总费用。

样例输入

5

5 3 8 2 9

样例输出

59

💜问题分析💜


这个题目让我刷新了对哈弗曼树的认知,原来是以为哈夫曼数计算权值的时候只能使用节点权值乘以他的距离,但是还可以实现的方式是从最底层进行加,每次累加最小的两个节点,当加到根节点的时候,权值也就计算出来了。

💜代码实现💜


n=int(input())

ls=list(map(int,input().split()))

ans=[]

while len(ls)>1:

ls.sort(reverse=True)

temp=ls.pop()+ls.pop()

ls.append(temp)

ans.append(temp)

print(sum(ans))

💟抽奖💞

========================================================================


🤎问题描述🤎


Description

在终于熬过了高中之后,你进入了大学,你听信了大人们的谎言,上了大学就轻松了,实际上你发现大学比高中更卷了。

但是!你已经佛系了起来,凭借着高中学过oi,在大学开始了摸鱼,而一直打LOL的你,最近发现了原神这一款游戏也很有意思,

而且作为lsp的你,对于里面的老婆你表示你全都要,但是为了计算好你怎么把原石投入池子,你需要好好计划一番。

你只喜欢up池,你当前已经拥有了xx颗原石,00个星辉,假设你不是很非也不是很欧,

每10发平均可以获得3个星辉(注意每满十发才可获得3星辉,1~9发无星辉,10~19发3星辉),

根据原神的规则,每160颗原石可以抽一发,每5个星辉可以抽一发,作为大学生的你并没有太多钱来氪金,所以你得算一算目前到底可以抽多少发。

Input

一个整数xx,表示xx颗原石,(1 <= x <= 10^8)。

Output

一个整数nn,表示你可以抽多少发。

Sample Input 1

3200

Sample Output 1

21

🤎问题分析🤎


进行抽奖,最先应该考虑使用原石进行抽奖,然后用原石抽奖会得到许多的星辉,再使用星辉进行抽奖

星辉抽奖得到一定的抽奖次数后又可以得到星辉,就这样利滚利,抽奖的次数也就越来越多,直到星辉抽到不够5,跳出循环。

🤎代码实现🤎


x=int(input())

num=0

n=x//160

num=3*(n//10)

while num:

if num-5>=0:

n+=1

if n%10==0:

num+=3

num-=5

else:

break

print(n)

💟前缀最值&后缀最值💞

===============================================================================


💝问题描述💝


给定一个序列,求该序列的浅前缀最小值,前缀最大值。

给定一个序列,求该序列的浅后缀最小值,后缀最大值。

💝问题分析💝


在进行线性动态规划的时候可能有需求

下一期应该是动态规划专题。这个作为铺垫

当然这只是求解思路,进行实际问题求解的时候还要看题目要求

然后定边界的大小。

💝代码实现💝


前缀最值

ls=[2,1,2,31,23,12,3,12,3,12,3,13,1,23,-1,2,31,3,1,4,2,42,14,2,31,4,53,4,53,4,6,45,7,6,5,87]

前缀最大值

ans=[0]*len(ls)

ans[0]=ls[0]

i=1

while i<len(ls):

ans[i]=max(ans[i-1],ls[i-1])

i+=1

n=int(input(“请输入要求前缀最大值数的个数”))

t=[]

for i in range(n):

t.append(int(input()))

for i in t:

print(ans[i])

前缀最小值

ans=[0]*len(ls)

ans[0]=ls[0]

for i in range(1,len(ls)):

ans[i]=min(ans[i-1],ls[i-1])

n=int(input(“请输入要求前缀最小值数的个数”))

t=[]

for i in range(n):

t.append(int(input()))

for i in t:

print(ans[i])

后缀最值

ls=[1,1,2,31,23,12,3,12,3,12,3,13,1,23,1,2,31,3,1,4,2,42,14,2,31,4,53,4,53,4,6,45,7,6,5,87]

#给定一个序列,n个下标,输出下标后缀的最大值

n=len(ls)

ans=[0]*n

ans[n-1]=ls[n-1]

for i in range(n-2,-1,-1):

ans[i]=max(ans[i+1],ls[i+1])

print(ans)

给定一个序列,n个下标,输出下标后缀最小值

n=len(ls)

ans=[0]*n

ans[n-1]=ls[n-1]

for i in range(n-2,-1,-1):

ans[i]=min(ans[i+1],ls[i+1])

print(ans)

💟纯质数求解💞

===========================================================================


🖤问题描述🖤


本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

如果一个正整数只有 1 和它本身两个约数,则称为一个质数(又称素数)。

前几个质数是:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, · · · 。

如果一个质数的所有十进制数位都是质数,我们称它为纯质数。

例如:2,3, 5, 7, 23, 37 都是纯质数,而 11, 13, 17, 19, 29, 31不是纯质数。

当然 1, 4, 35 也不是纯质数。请问,在 1到 20210605 中,有多少个纯质数?

🖤问题分析🖤


纯质数求解,在计算每一位的时候,只有2,3,5,7四种情况,只要有一位不是其中之一就代表

该数不是纯质数。就应该舍弃掉。带1或者0的肯定不是可以筛掉一大部分,由于是填空题这里就不再优化了,只有13w数据量,不出5秒计算完毕。

🖤代码实现🖤


import math

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值